在这种情况下,我需要用两行选择特定的文本。我这样做是通过以下代码进行的:
Selection.Paragraphs(1).Range.Select
Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend
但上述代码不适用于以下所有四种场景。我在寻找代码,这将输出第一行和第二行的选择,直到‘逗号’。我需要尽可能简单的代码,请帮助。
场景1
[医]新能源基础结构
IENOVA* MM,Buy
场景2
[医]新能源基础结构
IENOVA13 MM,出售
场景3
[医]新能源基础结构
IENOVA* MM
场景4编辑的
Nova SAB
IENOVA MM
图片插图:
发布于 2018-06-15 15:27:42
下面将这两段作为单独的范围进行处理。第一段是不加改动的,作为获得第二段的起点。
使用Instr
函数,它确定是否存在逗号--如果没有逗号,则Instr
返回0,否则为正数。
如果没有逗号,段落标记就会被切断。现在还不清楚你是否想要这个Chr(13),如果你想要的话,只需注释掉这一行,段落就会被选中,不会有任何变化。
如果有逗号,范围将折叠到它的起始点,然后扩展到逗号的位置,减去1(省略逗号)。
然后,为debug.print连接这两个字符串。然后将第一个范围的端点扩展到第二个范围的端点,这样就有一个范围(如果这是您所需要的--这还不清楚)。
Sub SelectInfo()
Dim rngLine1 As Word.Range
Dim rngLine2 As Word.Range
Dim isComma As Long
Set rngLine1 = Selection.Range.Paragraphs(1).Range
Set rngLine2 = rngLine1.Duplicate
rngLine2.Collapse (wdCollapseEnd)
Set rngLine2 = rngLine2.Paragraphs(1).Range
isComma = InStr(rngLine2.Text, ",")
If isComma = 0 Then
'No comma, assume we don't want the last paragraph mark...
rngLine2.MoveEnd wdCharacter, -1
Else
rngLine2.Collapse wdCollapseStart
rngLine2.MoveEnd wdCharacter, isComma - 1
End If
Debug.Print rngLine1.Text & rngLine2.Text
'Get a single Range instead of the string:
rngLine1.End = rngLine2.End
End Sub
发布于 2018-06-15 10:41:04
直截了当地回答你的问题:
.我在寻找能输出第一行和第二行直到‘逗号’的代码.
您可以对代码的第2行进行如下调整;
Selection.Paragraphs(1).Range.Select
Selection.MoveEndUntil ",", wdForward
这样做是将选择的末尾向前移动,直到它找到",“。
但是,如果根据您的“方案”,某些选择可能不包含逗号,则下列操作将有效:
亚SelectionTest()
Dim mySel As String
With Selection
.Paragraphs(1).Range.Select
mySel = Selection
If InStr(1, mySel, ",") Then
.MoveEndUntil ",", wdForward
Else
.Extend "M"
.Extend "M"
End If
End With
结束子对象
这样做是选择段落,将字符串设置为变量mySel,并使用InStr函数测试字符串是否包含逗号,如果包含逗号,则执行与上面相同的代码,但如果没有逗号,则会将选择扩展到字符"M“(大写M),然后再将选择扩展到下一个"M”。
正如您在评论中指出的,文本中的"MM“部分是一个变量,因此:
Sub SelectionTest()
Dim mySel As String
With Selection
.Paragraphs(1).Range.Select
.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
mySel = Selection
If InStr(1, mySel, ",") Then
.Paragraphs(1).Range.Select
.MoveEndUntil ","
Else: Exit Sub
End If
End With
End Sub
这样做是选择第一段,然后将选择扩展到第2行的末尾,将选定的文本设置为变量mySel
,并使用InStr
函数测试字符串是否包含逗号,如果包含逗号,则执行与上面相同的代码,但如果没有逗号,则保留选定的2行,仅此而已。
这使得代码更短,而不是每个国家都有一个ElseIf
语句("MM“、"RO”、"TI“等),但是在国家代码之后不依赖文本。否则,按照答案的前一部分,对每个国家变量重复ElseIf
。
我在所有场景中测试了这一点(通过将场景段落复制/粘贴到word中),每个场景的结果都与您的“目标选择”相同,只要在运行代码时光标位于所需段落的开头。
或者,您可以省略指定逗号的部分并只使用(可能会根据需要进行调整,并将其放在if语句中以允许变量):
With Selection
.Paragraphs(1).Range.Select
.Extend "M"
.Extend "M"
End With
这些代码将基于您在问题中所问和提供的内容而工作,但可能不是它当前形式中最普遍的代码。
关于以下链接中使用的函数和方法,有一些更多的信息:
https://stackoverflow.com/questions/50870672
复制相似问题