假设我在Word VBA中有Range
引用,我想将其分解为格式(字体,颜色等)相同的较小范围。例如,如果我从:
快速棕色狐狸跳过 lazy 狗。
...然后我想回到5个范围,如下所示:
快速
棕色狐狸跳过了
懒惰
狗。
我曾希望在VBA中有一种内置的方法可以做到这一点(甚至还有使用这种设施的虚拟记忆),但我找不到任何东西。
我可以在代码中做我需要做的事情,但是本地工作的东西会更快(很多)。
[在代码中,我会使用这样的事实 - 例如 - 如果范围包含粗体和非粗体的混合,oRange.Font.Bold
将返回“undefined”,因此我可以反复使用它来发现范围均匀范围。但是我很确定Word会在幕后做这件事,所以如果有人可以为我吹嘘,我会很感激。]
编辑:删除了StackOverflow HTML渲染器不喜欢的更复杂的示例。
答案 0 :(得分:5)
在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等任何属性。