【问题标题】:using macro to expand subdocuments使用宏扩展子文档
【发布时间】:2016-11-02 18:56:57
【问题描述】:

我有一个由子文档组成的 word 文档(word 2013)。

要生成最终文档,我必须:

  • 查看->大纲

然后,点击“展开子文档”并通过“关闭大纲视图”按钮关闭大纲视图。

我正在尝试编写一个自动执行此操作的宏(首先使用宏记录器来查找正确的命令)。 但我没有相当于“关闭大纲视图”。

ActiveWindow.ActivePane.View.Type = wdOutlineView
ActiveDocument.Subdocuments.Expanded = True

然后我添加了以下语句,希望它会关闭大纲视图,但不是:

ActiveWindow.ActivePane.View.Type = wdNormalView

使用bmgh1985 提供的提示,我将最后一条语句修改为:

ActiveWindow.ActivePane.View.Type = 3

但是 Word 挂了:Subdocument 的扩展是异步处理(由 Expanded 属性的修改触发),word 正在扩展 Subdocument,而视图恢复正常。

有没有办法等待Subdocument的扩展结束? (我尝试过使用计时器和大循环,但没办法……)

【问题讨论】:

  • 您是否尝试过创建一个变量来获取ActiveWindow.ActivePane.View.Type 的初始状态,然后在完成后将其设置回保存的变量?
  • 我记得,子文档的 Locked 属性只有在扩展时才为 False?您是否尝试过循环检查该更改?
  • 我做了几个实验,但仍然没有好的结果:要扩展子文档,我必须将 Expanded 属性设置为 True。但是我不知道如何等待所有子文件的扩展完成,然后再移动到下一个 vba 语句。我试图实现一个计时器 - Application.Wait (Now + TimeValue("0:00:20")) - 但它似乎只对 Excel vba 有效。

标签: vba ms-word


【解决方案1】:

尝试更换

 ActiveDocument.Subdocuments.Expanded = True

Do While ActiveDocument.Subdocuments.Expanded = False
    ActiveDocument.Subdocuments.Expanded = True
Loop

这将使脚本保持在该品脱,直到Expanded = True 然后回到正常的文档查看使用:

ActiveWindow.ActivePane.View.Type = wdPrintView

而不是

ActiveWindow.ActivePane.View.Type = 3

已编辑:

所以,我发现运行您的原始脚本时,word 需要一段时间才能赶上文档中的页数,在我的测试用例中,它扩展了 10 个子文档,每个子文档 24 页,每个文档都有文字、表格和图片。

我在扩展子文档之后添加了一个循环,似乎已经解决了延迟的页码更新。

使用宏记录器,我还找到了另一种无需通过 OutLine 视图即可切换展开的子文档的方法。

Sub Macro2()
    'Toggles the Expanded without going view the Outline View
    ActiveDocument.Subdocuments.Expanded = Not ActiveDocument.Subdocuments.Expanded

    i = 1
    Do Until i = TotPages
        'Setting i to Total Number of Pages
        i = Selection.Information(wdNumberOfPagesInDocument)
        'Setting TotPages to Total Number of Pages
        TotPages = Selection.Information(wdNumberOfPagesInDocument)
    Loop

End Sub

【讨论】:

  • 感谢您的帮助 - 但它仍然失败:Word 现在似乎卡住了。
  • 检查您没有在后台运行的其他 word open 实例。这可以通过TaskManager查看
  • @PierreG。您的文档中有多少个Subdocuments,每个文档大约有多少页。
  • 不幸的是它不起作用(在您的代码中进行了几次修复之后):由于某种原因,扩展没有发生,并且循环在 1 次迭代后结束,因为 TotPages 没有达到预期值(应该大约 240p)。但是谢谢你的支持,你给了我更多我没有的知识。
【解决方案2】:

感谢所有在此线程中的想法。但是,它并没有扩展导致问题的子文档。它改变了异步发生的视图,除非您等待它完成(DoEvents),否则子文档扩展不起作用。以下代码适用于 Word 2010。

Sub SetupMasterForEditing()                                                                                                                             
'                                                                                                                                                       
' The document comes up in a default mode with subdocuments locked. Change it back.                                                
'                                                                                                                                                       
    ChangeView (wdOutlineView)                                                                                                                          
    ActiveDocument.Subdocuments.Expanded = True                                                                                                         
    ChangeView (wdPrintView)                                                                                                                                                                                                                                                                   
End Sub 

Sub ChangeView(View As Integer)                                                                                                                         
' Change to view View - see https://msdn.microsoft.com/en-us/library/office/ff836365.aspx for values                                                    
    ActiveWindow.ActivePane.View.Type = View                                                                                                            
    DoEvents                                                                                                                                   
End Sub                                                                                                                                                 

【讨论】:

  • 糟糕 - 如果使用新的 Word 实例运行,这有时仍会失败并出现运行时错误。 Kludge 是点击“确定”并再次运行它!
【解决方案3】:

我正在尝试完成同样的事情,以下对我有用(Office 2007):

Sub ExpandAll()
  ActiveDocument.ActiveWindow.View.Type = wdMasterView

  If ActiveDocument.Subdocuments.Count >= 1 Then
    ActiveDocument.Subdocuments.Expanded = True
  End If

  ' Unlink
  ActiveDocument.Subdocuments(1).Delete
End Sub

这很奇怪。我最初尝试了 wdOutlineView,但我不断收到错误。当我切换到 wdMasterView 时,它突然工作并转到大纲视图。我不知道为什么。

最后一行取消了子文档与主文档的链接。奇怪的是,我不知道它为什么起作用。我最初打算遍历子文档集合以删除每个集合,但由于某种原因,仅删除第一个集合就已经将它们全部取消链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多