当前位置: 首页 > 知识库问答 >
问题:

删除指定范围内的高亮显示

魏凡
2023-03-14

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

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

错误出现在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个答案

宇文德明
2023-03-14

你就快到了,我修改了代码并测试了它,它在我这边运行得非常好。它将在文档中找到任何突出显示的区域,并将从字符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
孟鸿朗
2023-03-14

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

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

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

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

以下是我的示例代码:

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
 类似资料:
  • 本文向大家介绍在Python中删除范围内的元素,包括了在Python中删除范围内的元素的使用技巧和注意事项,需要的朋友参考一下 通过使用元素的索引和del函数,可以直接从python删除单个元素。但是在某些情况下,我们需要删除一组索引的元素。本文探讨了仅删除索引列表中指定的列表中那些元素的方法。 使用排序和删除 在这种方法中,我们创建一个包含必须删除的索引值的列表。我们对它们进行排序和反转以保留列

  • 现在我想知道如何使用ITextSharp移除那些高亮显示的矩形。 它删除了所有的注释,但我想删除特定的注释。假设我在第1页突出了美国和专利申请出版物,现在我想单独删除美国。我会通过美国的文本。 我引用了这个答案。其中,要获得突出显示的文本,需要获得存储在突出显示注释中的坐标(存储在QuadPoints数组中),并且需要使用这些坐标解析页面内容中位于这些坐标处的文本。

  • Python3 实例 素数(prime number)又称质数,有无限个。除了1和它本身以外不再被其他的除数整除。 以下实例可以输出指定范围内的素数: 实例(Python 3.0+)#!/usr/bin/python3 # 输出指定范围内的素数 # take input from the user lower = int(input("输入区间最小值: ")) upper = int(input(

  • 用途:我有一个零件列表,每个工作都有变化。 我的每个part#都有3行,这就是为什么我运行“entirerow.delete”3次。 这就是我现在拥有的。

  • 问题内容: 我读了一些在Ruby中这样做的代码: 输出: 有没有什么可以做到的呢?如果没有,是否有Node模块允许类似的东西? 问题答案: Javascript本身没有该功能。您可以在下面找到一些如何解决的示例: 正常功能,基本平面中的任何字符(不检查代理对) 与上面相同,但是作为添加到数组原型的函数,因此可用于所有数组: 预选字符的范围。比上面的函数要快,并且可以用来表示AZ和az: 或asci

  • 我正在尝试编写一个Heap排序方法,它只在传入方法的给定范围内执行排序。传入的范围是低和高,这些值对应于堆中的值,而不是堆的索引。例如,输入数组可能是:28 10 49 20 59 61 17,如果low=49,high=61,Heap排序后的结果数组将看起来像这样:28 10 20 49 59 61 17。范围之外的值保持不变。我已经有了一个工作的Heap排序方法,但我的问题是如何修改这个方法以