使用宏来扩展子文档

时间:2015-10-27 10:30:14

标签: vba ms-word word-vba

我有一个由子文档组成的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扩展的结束? (我试过用一个计时器和一个大循环,但没办法....)

3 个答案:

答案 0 :(得分:2)

尝试更换

 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

编辑:

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

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

使用宏录制器我还找到了另一种切换扩展子文档的方法,而无需通过OutLine View。

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

答案 1 :(得分:0)

感谢所有人对这个主题的想法。但是,它并没有扩展导致问题的子文档。它正在改变异步发生的视图,除非你等待它完成(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                                                                                                                                                 

答案 2 :(得分:0)

我正在努力完成同样的事情,以下工作对我来说(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它突然工作并转到大纲视图。我不明白为什么。

最后一行取消链接子文档与主文档。奇怪的是,我不知道它为什么会起作用。我原本打算遍历子文档集合来删除每一个,但由于某种原因,只是删除第一个已经取消所有链接。