我正在尝试确定用户Word文档中有关修订的信息,但是当我更改修订视图时,我的VBA代码似乎未返回正确的paragraph.style属性。
据我所知,.style属性看起来像是“正在追赶”,并且在实时运行脚本时没有反映期望值,并且在打印行暂停时我确实看到了期望值在调试模式下。也许有一种方法可以确保在运行我的代码的下一行之前,使修订视图更改为“结算”?我尝试了多个DoEvents实例,但无济于事。
可以通过执行以下操作来重现我看到的行为:
从该文档中运行此子例程:
Sub test()
For Each rev In ActiveDocument.Revisions
ActiveDocument.Windows(1).View.RevisionsFilter.Markup = wdRevisionsMarkupNone
Debug.Print "STYLE: [" & rev.Range.Paragraphs(1).Style & "], TEXT: [" & rev.Range.Paragraphs(1).Range & "]"
ActiveDocument.Windows(1).View.RevisionsFilter.Markup = wdRevisionsMarkupAll
Next rev
End Sub
您将看到调试打印输出将错误地显示样式或第一个修订版本的“标题1”(第二个段落中已删除的标题和修订版本)。即我认为这两个版本的样式都应显示“正文”。这是基于我在“ print.debug”行中更多地调试时暂停代码时对文档状态和修订范围的检查,以及在所有情况下均会打印的“文本”输出。>
我将在这里添加,每个循环中视图更改的“侧翼”是一种有效且有用的机制,因为我的实际完整代码在此for循环中做了很多工作,因此我想要这个样式读取后,将其“原子化”并在执行读取后“还原”视图状态。最终,重点在于:即使有可能更有效地组织事物,我想做的事情也应该“起作用”。