我正在寻找数字(使用格式,因此没有Regex),并且以下代码有效:
Sub FindSuperscript()
Application.ScreenUpdating = False
Dim contentRange As Range
Set contentRange = ActiveDocument.Content
contentRange.Find.ClearFormatting
With contentRange.Find.Font
.Bold = False
.Italic = False
.StrikeThrough = False
.DoubleStrikeThrough = False
.Outline = False
.Shadow = False
.Hidden = False
.SmallCaps = False
.AllCaps = False
.Superscript = True
.Subscript = False
End With
With contentRange.Find
.Text = "[0-9]*>"
.MatchWildcards = True
End With
contentRange.Find.Execute
While contentRange.Find.Found
contentRange.Find.Execute
Wend
Application.ScreenUpdating = True
End Sub
但是它将找到10,然后在它应该先找到10然后找到11时再返回0。
答案 0 :(得分:1)
我要更改几件事:
.Wrap
设置为wdFindStop
。否则它可能会陷入无限循环(默认为wdFindContinue
)。While...Wend
已被“弃用”了很长时间;首选Do While/Until...Loop While/Until
,它在设置方式上提供了更大的灵活性。Find
时,正在搜索的Range
对象将重置为找到的项目。因此,有必要将搜索Range
移到该点之外。我更喜欢Range.Collapse wdCollapseEnd
将搜索的起点移到先前找到的Range
之外。 (我不确定为什么在搜索Selection.MoveRight
时实际上可以使用Range
的原因,因为在“找到”之后选择不应更改。)示例代码:
With contentRange.Find
.Text = "[0-9]*>"
.Wrap = wdFindStop
.MatchWildcards = True
End With
contentRange.Find.Execute
Do While contentRange.Find.Found
contentRange.Collapse wdCollapseEnd
contentRange.Find.Execute
Loop
答案 1 :(得分:0)
更新:看起来您可以使用此功能:
Selection.MoveRight Unit:=wdCharacter, Count:=Len(contentRange.Text)
所以:
contentRange.Find.Execute
While contentRange.Find.Found
Selection.MoveRight Unit:=wdCharacter, Count:=Len(contentRange.Text)
contentRange.Find.Execute
Wend
但对其他答案感兴趣。
答案 2 :(得分:0)
尝试根据以下内容进行尝试:
Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
With .Font
.Bold = False
.Italic = False
.StrikeThrough = False
.DoubleStrikeThrough = False
.Outline = False
.Shadow = False
.Hidden = False
.SmallCaps = False
.AllCaps = False
.Superscript = True
End With
.Text = "<[0-9]@>"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
MsgBox .Text
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub
由于您不清楚要如何处理找到的内容,因此我只在其中放置了一个消息框。