VBA:Word 2013展开/折叠特定标题

时间:2014-01-08 18:00:53

标签: word-vba

我需要帮助,如果您了解VBA,我认为这很容易:

我想要一个按钮或下拉菜单来扩展/折叠特定的菜单标题。

以下是文档布局的概述(部门级别中也有菜单和数据,但我不需要折叠/展开这些级别):

- 每日流程

  • A部门
  • B部门
  • C部门
  • D部门

- 每周流程

  • A部门
  • B部门
  • C部门
  • D部门

- 每月流程

  • A部门
  • B部门
  • C部门
  • D部门

- 年度流程

  • A部门
  • B部门
  • C部门
  • D部门

- 附录

我希望每个部门都有按钮,隐藏所有其他部门。例如,如果我单击部门A,则所有部门B,C,D菜单将折叠,仅显示部门A.

我想这些将是我需要的按钮:

  1. ExpandAll
  2. ShowDeptA
  3. ShowDeptB
  4. ShowDeptC
  5. ShowDeptD
  6. 这是我觉得可行的一个部门的伪代码:

    1. ExpandAll
    2. 从文档顶部开始
    3. 搜索格式= Heading2
    4. 如果Heading2 = DepartmentA:展开标题,  否则:崩溃标题
    5. 到目前为止我所拥有的:(我只需要命令折叠标题)

      Sub OpenDeptA()
      '
      ' OpenDeptA Macro
      ' Show only DeptA sections
      '
      '    Expand all menus
          ActiveDocument.ActiveWindow.View.ExpandAllHeadings
      '    Move cursor to the top
          Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
          Selection.HomeKey Unit:=wdStory
      '    Find first menu using format: Heading 2
          Selection.Find.Style = ActiveDocument.Styles("Heading 2")
          Selection.Find.Execute
      '    Loop through document collapsing heading if not equal to "DeptA"
      Do Until Selection.Find.Found = False
          If Selection.Text = "DeptA" Then
              Selection.Find.Style = ActiveDocument.Styles("Heading 2")
              Selection.Find.Execute
          Else: Selection.CollapseHeading  ***NOT SURE HOW TO COLLAPSE MENUS***
              Selection.Find.Style = ActiveDocument.Styles("Heading 2")            
              Selection.Find.Execute
          End If
      Loop
      End Sub
      

1 个答案:

答案 0 :(得分:0)

我没有Word 2013,所以我无法提供完整的答案。但我可以帮助你做两件事。

  1. 比较文字。现在你只是比较单词“Dept A”,但实际选择也可能包含换行符。你可以试试

    Selection.Text = "DeptA" & vbCR
    

    Selection.Text Like "DeptA*"
    

    这取决于这些标题的严格控制程度。

  2. 折叠内容。 我假设您已经将文档放入大纲视图中。如果是,则命令为

    ActiveWindow.View.CollapseOutline Selection.Range

    关于CollapseOutline的事情是,它只会崩溃一个级别。因此,如果你的标题2下有一个标题3,那将会崩溃,但你的标题2不会。从我所知道的,多次运行CollapseOutline没有任何害处,因此我会提前确定文档中的级别有多深,然后运行该方法足以适应这种情况。 好的,在我面前用Word 2013的副本重新审视这个。似乎没有一种折叠文本的方法;相反,您将其折叠状态设置为true。而且,它适用于段落,而不是范围或选择。所以这是代码的最后一部分,包括折叠代码:

    Do Until Selection.Find.Found = False
        If Selection.Text Like "Department A*" Then
            Selection.Find.Style = ActiveDocument.Styles("Heading 2")
            Selection.Find.Execute
        Else: Selection.Paragraphs(1).CollapsedState = True
            Selection.Find.Style = ActiveDocument.Styles("Heading 2")
            Selection.Find.Execute
        End If
    Loop
    
  3. 关于您可以在宏列表中看到的关于Word命令的问题,您可以运行这些命令,但它们的真正威力在于能够重新编码它们以执行您喜欢的操作。在这种情况下,您需要做的是对象模型支持,所以我不打扰它们。

    最后,如果您打算进行大量的VBA编码,我建议您熟悉对象浏览器(VB编辑器中的F2)。你可以搜索你认为可能存在的东西;例如,在调查这个问题时,我搜索了“Collapseheading”。在这种情况下,它本身并不富有成效,但确实让我进入了CollapsedState附近。

    希望这有帮助。