我一直处于需要选择两行特定文本的情况。我通过以下代码执行此操作:
Selection.Paragraphs(1).Range.Select
Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend
但上述代码并不适用于以下所有四种情况。我正在寻找能够输出第一行和第二行选择的代码,直到“逗号”。我需要尽可能简单的代码,请帮助。
情景1
Infraestructura Energetica Nova SAB De CV
IENOVA * MM,购买
场景2
Infraestructura Energetica Nova SAB De CV
IENOVA13 MM,卖
场景3
Infraestructura Energetica Nova SAB De CV
IENOVA * MM
场景4已修改
Nova SAB
IENOVA MM
图片插图:
答案 0 :(得分:2)
以下两段作为单独的范围。第一段被不加改变地拾取并用作获得第二段的起点。
使用Instr
函数确定是否存在逗号 - Instr
如果没有则返回0,否则返回正数。
如果没有逗号,则段落标记被截断。目前尚不清楚你是否想要这个Chr(13),如果你这样做,只需注释掉该行,并且该段落被拾取而没有任何变化。
如果有逗号,则Range会折叠到其起始点,然后扩展到逗号的位置,减去1(不包括逗号)。
然后为debug.print连接两个字符串。然后第一个Range的终点延伸到第二个Range的终点,这样你就有了一个Range(如果你需要的那个 - 那个不清楚)。
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
答案 1 :(得分:1)
从字面上理解你的问题:
...我正在搜索能够输出第一行和第二行选择的代码,直到“逗号”。
您可以按如下方式调整代码的第二行;
Selection.Paragraphs(1).Range.Select
Selection.MoveEndUntil ",", wdForward
这样做会将选择的结束向前移动,直到找到“,”。
但是,根据您的“情景”,某些选项可能不包含逗号,以下内容将起作用:
Sub 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
End Sub
这样做是选择段落,将字符串设置为变量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
这样做是选择第一段然后将选择扩展到第二行的末尾,将所选文本设置为变量mySel
并使用InStr
函数测试,如果字符串包含逗号,如果是,它执行与上面相同的代码,但是如果没有逗号,它会保持选择2行,就是这样。
这样可以缩短代码,而不是每个国家/地区都有ElseIf
语句(“MM”,“RO”,“TI”等),但在国家/地区代码之后不依赖于任何文本。否则,请按照答案的前一部分进行操作,并为每个国家/地区变量重复ElseIf
。
我在所有场景中测试了这一点(通过将场景段落复制/粘贴到单词中),只要光标位于所需段落的开头,每个场景都与“目标选择”相同跑了。
或者,您可以省略指定逗号的部分并使用(可能根据需要调整并将其放在if语句中以允许您的变量):
With Selection
.Paragraphs(1).Range.Select
.Extend "M"
.Extend "M"
End With
这些代码将根据您在问题中提出并提供的内容而有效,但可能不是当前形式中最通用的代码。
以下链接中使用的功能和方法有更多信息: