如何在简单vba字符串替换中检测编号

如何在简单vba字符串替换中检测编号,vba,ms-word,Vba,Ms Word,我正在尝试替换编号(单词的1、2等)。在一个简单的字符串和替换搜索,但我似乎找不到数字 这是Word 365的,我正在使用其中的VB编辑器 Sub ayaya() Documents.Open FileName:=ActiveDocument.Path + "\Doc1.docm" Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "S

我正在尝试替换编号(单词的1、2等)。在一个简单的字符串和替换搜索,但我似乎找不到数字

这是Word 365的,我正在使用其中的VB编辑器

Sub ayaya()
Documents.Open FileName:=ActiveDocument.Path + "\Doc1.docm"
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "SSS"
    .Replacement.Text = "PPP"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
With Selection
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseStart
    Else
        .Collapse Direction:=wdCollapseEnd
    End If
    .Find.Execute Replace:=wdReplaceAll
End With

End Sub

我的word文档如下所示:

SSS
SSS
1.  SSS 
然后转向

PPP
PPP
1.  PPP
但当我将搜索替换为

With Selection.Find
    .Text = "1. SSS"

它找不到文本。

编号是一个对象,不能像纯文本一样进行搜索。

您找不到与段落文本关联的编号,因为它很可能是一个ListLevelNumber,并且这些编号是由ListFormat样式自动生成的。换句话说,它们不是使用搜索可以找到的物理文本的一部分,至少是您当前在代码中设置的方式

需要进行单独的搜索才能找到正在使用的ListParagation样式,然后找到一些额外的代码,这些代码将操纵ListLevelNumber(如果您正试图这样做的话)

下面是确定给定段落上的ListLevelNumber的示例代码,然后根据实际级别采取一些操作:

Sub IsSelectionListParagraph()
    Dim i As Integer
    If Selection.Range.ListParagraphs.Count > 0 Then
        For i = 1 To Selection.Range.ListParagraphs.Count
            Select Case Selection.Range.ListParagraphs(i).Range.ListFormat.ListLevelNumber
                Case Is = 1
                    Debug.Print Selection.Range.Text
                Case Is = 2
                    Debug.Print Selection.Range.Text
                Case Else
                    Debug.Print Selection.Range.Text
            End Select
        Next
    End If
End Sub

您的查找对象已附加到选择对象,但您尚未选择任何对象。尝试将您的选择对象设置为要搜索的文本区域。在我的第一个示例中,它不是在选择输入的文本吗?1之间的空格数是否正确。还有SSS?我想
1。文档中的SSS可以是Word中的列表,因此它包含制表符,有自己的格式,所以我甚至找不到字符串“1”。我认为编号(项目符号)不是我作为find方法的纯文本输入的东西。这个“答案”的质量很低,因为它没有贡献任何新的东西-它只是重复Rich编写的内容的一小部分。虽然堆栈溢出确实允许人们回答自己的问题,但重复更好的贡献的一部分是没有价值的。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-谢谢@Taplar,我会做得更好。对不起@Cindy,我在Rich之前发布了这个消息,并不想影响他的反应。@ecksdee啊,我从时间戳上看不出这一点。很抱歉