下面的代码最终删除了文本-我想保留找到的内容的长度,并用空格或某些随机字符(如*)替换实际阴影区域,并保留阴影。
试图处理字符数并使用String(charcount,“”) 无济于事。
Sub changecolor()
Dim rg As Range
Set rg = ActiveDocument.Range
With rg.Find
.Format = True
.Text = ""
.Font.Shading.BackgroundPatternColor = RGB(255, 192, 0)
.Replacement.Text = ""
While .Execute
rg.Font.Shading.BackgroundPatternColor = RGB(0, 0, 0)
rg.Font.Color = wdColorBlack
rg.Collapse wdCollapseEnd
Wend
End With
Call ReplaceBlack
End Sub
Sub ReplaceBlack()
'
With Selection.Find
charc = Len(Selection)
.Format = True
.Text = ""
.Font.Shading.BackgroundPatternColor = RGB(0, 0, 0)
.Replacement.Text = String(charc, "")
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
End Sub
答案 0 :(得分:0)
问题代码的问题在于,它正在执行Selection
之前测量Find
的长度。因此,字符数将始终是此时选择的字符数。
必须先执行查找,并且对于每个阴影实例都必须执行查找,因为被阴影内容的长度可能会有所不同。由于需要针对每个实例执行此操作,因此可以将其合并到原始循环中,而不必在第二个循环中执行。
以下代码使用目标ReplaceBlack
对象Range
将整个颜色更改,字体更改和替换文本移动到rg
,该对象被传递给ReplaceBlack
作为参数。
Sub changecolor()
Dim rg As Range
Set rg = ActiveDocument.Range
With rg.Find
.Format = True
.Text = ""
.Font.Shading.BackgroundPatternColor = RGB(255, 192, 0)
.Replacement.Text = ""
While .Execute
ReplaceBlack rg
Wend
End With
End Sub
Sub ReplaceBlack(rg As Range)
rg.Font.Shading.BackgroundPatternColor = RGB(0, 0, 0)
rg.Font.color = wdColorBlack
charc = Len(rg)
rg.Text = String(charc, "*")
rg.Collapse wdCollapseEnd
End Sub