【问题标题】:How can I find the number of highlighted chunks of text in an MS Word Document如何在 MS Word 文档中找到突出显示的文本块的数量
【发布时间】:2023-03-04 23:24:01
【问题描述】:

我正在 MS Word 中编写一个宏,它应该在文档中找到所有突出显示的文本并对每个文本执行一些操作。我正在计划一个循环来执行搜索和操作部分,并且这部分代码没有问题。
但我不知道如何找到需要多少次迭代。有没有办法确定 VBA 中高亮的数量?
非常感谢。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:
    With ActiveDocument.Range.Find
      .Highlight = True
      While .Execute
        Debug.Print .Parent.Text
      Wend
    End With
    

    无需预先计算匹配数。您可以循环执行搜索,一旦没有更多匹配项,它将停止。

    确保将搜索应用到文档的右侧。我使用了ActiveDocument.Range,但任何Range 对象都可以。也许更具体的东西更适合您的情况。

    另外,检查Find 对象的许多其他属性并将它们设置为合理的值,这比使用默认值更好(没有人可以记住所有选项的所有默认值,加上Find 对象可能已经由一些较早的搜索设置)。

    【讨论】:

    • 谢谢你。它就像一个奇迹。但是,如果不是要求太多,您能否也提示一下是否可以找到该号码?您会看到,在进入循环之前,宏执行其他编辑,检查文档是否已被处理将是一个很好的功能,因此如果用户调用宏两次,它会检测到它已执行一次并退出。如果我能找到高亮的数量,这将起作用,因为宏会从块中删除高亮标记,并且在完成后就没有剩下了。
    • @Majid:如果第一次通过后没有亮点,那么循环甚至不会在第二次尝试时运行,因为没有亮点(即,Execute() 返回@987654327 @ 马上)。 ;) 或者我不明白你到底想要什么?
    • 是的,循环内的代码不会在第二次执行时运行,但我在循环之前有代码,它将执行。这就是为什么我需要检查文档中是否有任何亮点。我会将此检查作为宏所做的第一件事。如果没有办法直接访问这个数字,我想,我需要两个嵌套的 while 循环?
    • @Majid:你对数字太执着了,但数字对于你想做的事情并不重要。您想知道是否有 any 亮点,而不是有多少。只需Execute() 搜索一次(在宏的开头)。它将返回 True 或 False。 True 表示,至少有一个亮点,False 表示你已经完成了。
    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多