首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在不同场景的两行中选择特定文本

在不同场景的两行中选择特定文本
EN

Stack Overflow用户
提问于 2018-06-15 07:06:31
回答 2查看 225关注 0票数 0

在这种情况下,我需要用两行选择特定的文本。我这样做是通过以下代码进行的:

代码语言:javascript
运行
复制
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

图片插图:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-15 15:27:42

下面将这两段作为单独的范围进行处理。第一段是不加改动的,作为获得第二段的起点。

使用Instr函数,它确定是否存在逗号--如果没有逗号,则Instr返回0,否则为正数。

如果没有逗号,段落标记就会被切断。现在还不清楚你是否想要这个Chr(13),如果你想要的话,只需注释掉这一行,段落就会被选中,不会有任何变化。

如果有逗号,范围将折叠到它的起始点,然后扩展到逗号的位置,减去1(省略逗号)。

然后,为debug.print连接这两个字符串。然后将第一个范围的端点扩展到第二个范围的端点,这样就有一个范围(如果这是您所需要的--这还不清楚)。

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2018-06-15 10:41:04

直截了当地回答你的问题:

.我在寻找能输出第一行和第二行直到‘逗号’的代码.

您可以对代码的第2行进行如下调整;

代码语言:javascript
运行
复制
Selection.Paragraphs(1).Range.Select
Selection.MoveEndUntil ",", wdForward

这样做是将选择的末尾向前移动,直到它找到",“。

但是,如果根据您的“方案”,某些选择可能不包含逗号,则下列操作将有效:

亚SelectionTest()

代码语言:javascript
运行
复制
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“部分是一个变量,因此:

代码语言:javascript
运行
复制
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语句中以允许变量):

代码语言:javascript
运行
复制
With Selection
    .Paragraphs(1).Range.Select
    .Extend "M"
    .Extend "M"
End With

这些代码将基于您在问题中所问和提供的内容而工作,但可能不是它当前形式中最普遍的代码。

关于以下链接中使用的函数和方法,有一些更多的信息:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50870672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档