2009-11-24 49 views
5

假设我在Word VBA中有一个Range引用,并且我想将其分解为格式(字体,颜色等)相同的较小范围。例如,如果我开始:MS Word VBA - 确定“样式运行”的程度?

快速的棕色狐狸跳过了狗。

...然后我会想拿回5个范围,具体如下:

快速

的棕色狐狸跳过了

懒惰

狗。

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

我可以做我需要做的代码,但本地工作的东西会更多(太多)更快。

[在代码中,我会使用这样一个事实 - 例如 - oRange.Font.Bold将返回“未定义”,如果范围包含粗体和非粗体的混合,所以我可以反复使用它来发现统一的范围范围。但我敢肯定,Word将引擎盖下这样做,因此,如果有人可以弹出油烟机对我来说,我会很感激]

编辑:去除更为复杂的例子是,StackOverflow的HTML渲染器不喜欢。

回答

5

由于OM不支持运行,因此无法在VBA中实现这一点(但OOXML确实如此)。最好的办法是获取wdCharacterFormatting的wdUnits并创建一个循环来创建范围,提取它们的属性,然后销毁它们直到循环结束。你会probaby喜欢的东西开始:

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。

+0

完美,这正是我所期待的。我知道我曾经在某处看过类似的东西。谢谢! – 2010-02-05 10:34:19

+0

至少在Word 2013中,这会结束匹配的段落更改,但实际上并未更改字符格式。我最终解析Word XML以查找运行和段落属性(''和''),它回答了我的问题:“此文档是否有适用于它的任何样式?” – 2015-07-12 20:08:03