【问题标题】:MS Word VBA - Determine extent of "style run"?MS Word VBA - 确定“风格运行”的程度?
【发布时间】:2010-02-05 08:57:27
【问题描述】:

假设我在 Word VBA 中有一个 Range 引用,我想将其分解为格式(字体、颜色等)相同的较小范围。例如,如果我开始:

棕狐跳过懒惰狗。

...那我想取回5个范围,如下:

快速

棕狐跳过了

懒惰

狗。

我曾希望在 VBA 中有一个内置的方法来做到这一点(甚至有使用这种工具的幻影记忆),但我找不到任何东西。

我可以在代码中做我需要做的事情,但是在本机工作的事情会更快(很多)。

[在代码中,我会使用这样一个事实——例如——oRange.Font.Bold 如果范围包含粗体和非粗体的混合,则将返回“未定义”,因此我可以反复使用它来发现统一的范围。但我很确定 Word 会在后台执行此操作,所以如果有人能帮我打开这个引擎盖,我将不胜感激。]

编辑:删除了 StackOverflow HTML 渲染器不喜欢的更复杂的示例。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    在 VBA 中不能真正做到这一点,因为 OM 不支持运行(但是 OOXML 支持)。您可能做的最好的事情是获取 wdCharacterFormatting 的 wdUnits 并创建一个循环来创建范围,提取它们的属性,然后销毁它们,直到循环完成。您可能会从以下内容开始:

    Dim sel As Selection
    Set sel = ActiveWindow.Selection
    Dim selRange As Range
    Set selRange = selRange.Next(wdCharacterFormatting)
    

    获取下一组格式的开始和结束,例如 selRange.Start/selRange.End,以及任何属性,例如 selRange.Font.Name/selRange.Bold。

    【讨论】:

    • 完美,这正是我想要的。我知道我在某处见过类似的东西。谢谢!
    • 至少在 Word 2013 中,这最终会匹配段落更改,而实际上不会更改字符格式。我最终解析 Word XML 以查找运行和段落属性(<w:rPr><w:pPr>),这回答了我的问题“此文档是否应用了任何样式?”
    猜你喜欢
    • 2018-05-28
    • 2011-04-24
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多