如何在简单vba字符串替换中检测编号
我正在尝试替换编号(单词的1、2等)。在一个简单的字符串和替换搜索,但我似乎找不到数字 这是Word 365的,我正在使用其中的VB编辑器如何在简单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
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啊,我从时间戳上看不出这一点。很抱歉