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

Vba 删除指定范围内的突出显示,vba,ms-word,Vba,Ms Word,我在Word文档中突出显示了段落,我必须从每个段落的第3到第5个字符中删除突出显示 通过在VBA中的Set r=ActiveDocument.Range中搜索高亮显示的范围,可以完美地找到文本段 错误出现在行r(开始:=r\u开始,结束:=r\u结束)上。HighlightColorIndex=wdNoHighlight 编译错误:参数数目错误或属性分配无效 danI如何在r范围内正确指定第3到第5个字符的子范围?谢谢你的帮助 Dim r as Range Dim r_start As Inte

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

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

错误出现在行
r(开始:=r\u开始,结束:=r\u结束)上。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到字符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

导致错误消息的问题是,只有
Range
方法(如
Document.Range
)接受参数。
范围
对象,因为它不是一个方法,所以不能接受任何参数。为了设置范围对象的开始和结束,需要这些名称的属性。因此:

   r.Start = r.Start + r_start
   r.End = r.Start + r_end
您的代码还有一些我在测试时遇到的其他问题。例如,如果将开始位置设置为
r\u Start
,将结束位置设置为
r\u End
,则范围
r
将是整个文档的第二到第五个字符,而不是范围
r
的第二到第五个字符。这就是为什么上面的两行代码与原来的代码不同的原因

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

以下是我的示例代码:

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:-)Ibo的方法也有效。只是为了说明如何通用(和混乱)与词范围的工作可以…字是一个噩梦。不久前,有人发布了一个问题,关于为什么设置左上角的位置,然后将其读回,给出了一个不同的位置,我看到没有给出答案,但可能与边距或添加的对象与现有对象的关系有关。希望我能记得问题是什么。可能是图形作为形状对象的问题。是的,那是一场噩梦!