我正在尝试替换编号(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 = "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"
找不到文字。
答案 0 :(得分:3)
您找不到与段落文本关联的数字,因为它最有可能是ListLevelNumber,并且这些数字是由ListFormat样式自动生成的。换句话说,它们不是使用“搜索”可以找到的物理文本的一部分,至少不是您当前在代码中对其进行设置的方式。
需要使用单独的Search来查找正在使用的ListParagraph样式,然后如果要这样做,则需要一些其他代码来操纵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 :(得分:-1)
编号是ListParagraphs对象,无法像纯文本一样进行搜索。