删除指定范围内的突出显示

时间:2018-03-20 09:49:47

标签: vba ms-word word-vba

我在Word文档中突出显示了段落,我必须从中删除每个段落的第3到第5个字符的突出显示。

通过在VBA中的Set r = ActiveDocument.Range中搜索突出显示的范围,可以完美地找到文本片段。

错误出现在r(Start:=r_start, End:=r_end).HighlightColorIndex = wdNoHighlight行上。

  

编译错误:参数数量错误或属性分配无效。

danI如何正确指定r范围内第3到第5个字符的子范围?非常感谢您的帮助。

Dim r as Range
Dim r_start As Integer
Dim r_end As Integer
r_start = 2
r_end = 5
Set r = ActiveDocument.Range
With r.Find
  .Highlight = True
  Do While .Execute(FindText:="", Forward:=True) = True
    if r.Characters.Count > 7 Then
       r(Start:=r_start, End:=r_end).HighlightColorIndex = wdNoHighlight
    End If
    r.Collapse 0
  Loop
End With

2 个答案:

答案 0 :(得分:1)

导致错误消息的问题是只有Range方法(如Document.Range)中的参数。 Range对象,因为它不是方法,所以不能参数。要设置Range对象的Start和End,您需要这些名称的属性。所以:

   r.Start = r.Start + r_start
   r.End = r.Start + r_end

您的代码在测试时遇到了许多其他问题。例如,如果您将“开始”位置设置为r_start而结束位置设置为r_end,则范围r将来自整个文档的第二个到第五个字符 ,而不是范围r的第二到第五个字符。这就是为什么上面的两行代码已经从原来改变了。

接下来的问题是代码,因为搜索总是从“找到”突出显示开始,因此代码进入无限循环。出于这个原因,我添加了一个变量来捕获最初Found范围的终点,并将其用作每个循环中要搜索的Range的起点。要搜索的范围的结尾设置为文档的末尾。

这是我的示例代码:

Sub FindRemoveHighlighting()
    Dim r As Range, rDoc As Range
    Dim r_foundEnd As Long
    Dim r_start As Long
    Dim r_end As Long
    r_start = 2
    r_end = 5
    Set rDoc = ActiveDocument.content
    Set r = rDoc.Duplicate
    With r.Find
      .Highlight = True
      .Text = ""
      .Format = True
      .Format = True
      Do While .Execute() = True
        If r.Characters.Count > 7 Then
           rFoundEnd = r.End
           r.Start = r.Start + r_start
           r.End = r.Start + r_end
           r.HighlightColorIndex = wdNoHighlight
        End If
        r.Start = rFoundEnd
        r.End = rDoc.End
      Loop
    End With
End Sub

答案 1 :(得分:0)

你几乎就在那里,我修改了代码并对其进行了测试,并且它在我的结尾完美运行。它将在文档中找到任何突出显示的范围,并将从字符2到字符5中删除高亮显示:

Sub GetHighlights()
    Dim rng1 As Range
    Dim rng2 As Range
    Dim r_start As Integer
    Dim r_end As Integer
    r_start = 2
    r_end = 5

    Set rng1 = ActiveDocument.Range
    With rng1.Find
      .Highlight = True
      Do While .Execute(FindText:="", Forward:=True) = True
        If rng1.Characters.Count > 7 Then
            Set rng2 = ActiveDocument.Range(Start:=rng1.Start + r_start, End:=rng1.Start + r_end)
            rng2.HighlightColorIndex = wdNoHighlight
        End If
        rng1.Collapse 0
      Loop
    End With
End Sub