如何用相同长度的空格替换选定范围内的文本?

时间:2019-07-18 16:36:42

标签: vba ms-word

下面的代码最终删除了文本-我想保留找到的内容的长度,并用空格或某些随机字符(如*)替换实际阴影区域,并保留阴影。

试图处理字符数并使用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

1 个答案:

答案 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