我需要查找某些字符并将其替换为其他字符(或者只是删除它们)。 替换规则:如果找到的第一个字符是“A”,则将该字符替换为currNumber +100的值;如果找到的第一个字符是“B”,则将此字符替换为 currNumber -10 的值。如果找到字符“*_”(_符号可以重复多次),则只需替换为“”即可。
不幸的是我的代码版本不起作用。也许搜索并不是每次都从头开始
Dim xStr_1 As Long ' A
Dim xStr_2 As Long ' B
Dim xStr_3 As Long ' *_
Dim i As Long
Dim currNumber As long
currNumber = 0
xStr_1 = InStr(1, Selection, "A")
xStr_2 = InStr(1, Selection, "B")
xStr_3 = InStr(1, Selection, "*_")
if xStr_1 > 0 and xStr_1 < xStr_2 and xStr_1 < xStr_3 then i = xStr_1
if xStr_2 > 0 and xStr_2 < xStr_1 and xStr_2 < xStr_3 then i = xStr_2
if xStr_3 > 0 and xStr_3 < xStr_1 and xStr_3 < xStr_2 then i = xStr_3
Do While i <> 0
If xStr_1 = i Then
With Selection.Find
.ClearFormatting
.Text = "A"
.Wrap = wdFindContinue
With .Replacement
.ClearFormatting
.Text = currNumber + 100
End With
.Execute Replace:=wdReplaceOne
End With
currNumber = currNumber + 100
elseif xStr_2 = i Then
With Selection.Find
.ClearFormatting
.Text = "B"
.Wrap = wdFindContinue
With .Replacement
.ClearFormatting
.Text = currNumber - 10
End With
.Execute Replace:=wdReplaceOne
End With
currNumber = currNumber - 10
elseif xStr_3 = i Then
With Selection.Find
.ClearFormatting
.Text = "\*{1}\_{1,}"
.Wrap = wdFindContinue
With .Replacement
.ClearFormatting
.Text = currNumber
End With
.Execute Replace:=wdReplaceOne
End With
end if
xStr_1 = InStr(1, Selection, "A")
xStr_2 = InStr(1, Selection, "B")
xStr_3 = InStr(1, Selection, "*_")
if xStr_1 > 0 and xStr_1 < xStr_2 and xStr_1 < xStr_3 then i = xStr_1
if xStr_2 > 0 and xStr_2 < xStr_1 and xStr_2 < xStr_3 then i = xStr_2
if xStr_3 > 0 and xStr_3 < xStr_1 and xStr_3 < xStr_2 then i = xStr_3
Loop
以下“If”子句无法按预期工作。例如,Word 中的选择显示在第一个快照中。在这种情况下,xStr_1 = 16,并且 xStr_2 和 xStr_3 = 0。但是,尽管 xStr_1 > 0,但条件 xStr_1 < xStr_2 and xStr_1 < xStr_3 are evaluated as False. The vlaue of i is 0 after three If clauses.
if xStr_1 > 0 and xStr_1 < xStr_2 and xStr_1 < xStr_3 then i = xStr_1
if xStr_2 > 0 and xStr_2 < xStr_1 and xStr_2 < xStr_3 then i = xStr_2
if xStr_3 > 0 and xStr_3 < xStr_1 and xStr_3 < xStr_2 then i = xStr_3
请尝试一下。
Sub demo()
Dim xStr_1 As Long ' A
Dim xStr_2 As Long ' B
Dim xStr_3 As Long ' *_
Dim i As Long
Dim currNumber As Long
currNumber = 0
xStr_1 = InStr(1, Selection, "A")
xStr_2 = InStr(1, Selection, "B")
xStr_3 = InStr(1, Selection, "*_")
If xStr_1 > 0 And (xStr_1 < xStr_2 Or xStr_2 = 0) And (xStr_1 < xStr_3 Or xStr_3 = 0) Then i = xStr_1
If xStr_2 > 0 And (xStr_2 < xStr_1 Or xStr_1 = 0) And (xStr_2 < xStr_3 Or xStr_3 = 0) Then i = xStr_2
If xStr_3 > 0 And (xStr_3 < xStr_1 Or xStr_1 = 0) And (xStr_3 < xStr_2 Or xStr_2 = 0) Then i = xStr_3
Debug.Print xStr_1, xStr_2, xStr_3
Debug.Print i
End Sub