我需要帮助,如果您了解VBA,我认为这很容易:
我想要一个按钮或下拉菜单来扩展/折叠特定的菜单标题。
以下是文档布局的概述(部门级别中也有菜单和数据,但我不需要折叠/展开这些级别):
我希望每个部门都有按钮,隐藏所有其他部门。例如,如果我单击部门A,则所有部门B,C,D菜单将折叠,仅显示部门A.
我想这些将是我需要的按钮:
这是我觉得可行的一个部门的伪代码:
到目前为止我所拥有的:(我只需要命令折叠标题)
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
答案 0 :(得分:0)
我没有Word 2013,所以我无法提供完整的答案。但我可以帮助你做两件事。
比较文字。现在你只是比较单词“Dept A”,但实际选择也可能包含换行符。你可以试试
Selection.Text = "DeptA" & vbCR
或
Selection.Text Like "DeptA*"
这取决于这些标题的严格控制程度。
折叠内容。 我假设您已经将文档放入大纲视图中。如果是,则命令为
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
关于您可以在宏列表中看到的关于Word命令的问题,您可以运行这些命令,但它们的真正威力在于能够重新编码它们以执行您喜欢的操作。在这种情况下,您需要做的是对象模型支持,所以我不打扰它们。
最后,如果您打算进行大量的VBA编码,我建议您熟悉对象浏览器(VB编辑器中的F2)。你可以搜索你认为可能存在的东西;例如,在调查这个问题时,我搜索了“Collapseheading”。在这种情况下,它本身并不富有成效,但确实让我进入了CollapsedState附近。
希望这有帮助。