【问题标题】:VBA: Word 2013 Expand/Collapse Specific HeadingsVBA:Word 2013 展开/折叠特定标题
【发布时间】:2020-07-07 05:27:29
【问题描述】:

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

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

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

- 日常流程

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

- 每周进程

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

- 每月流程

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

- 年度流程

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

- 附录

我希望每个部门都有按钮,隐藏所有其他部门。比如我点击A部门,B、C、D所有的菜单都会折叠,只显示A部门。

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

  1. 全部展开
  2. ShowDeptA
  3. ShowDeptB
  4. ShowDeptC
  5. ShowDeptD

这是我认为可行的一个部门的伪代码:

  1. 全部展开
  2. 从文档顶部开始
  3. 搜索格式=标题2
  4. 如果 Heading2=DepartmentA:展开标题, 其他:折叠标题

到目前为止我所拥有的:(我只需要命令来折叠标题)

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

【问题讨论】:

  • 问题是我们这里不是免费写代码的。如果您已经自己尝试过某些东西,我们会提供支持。那么,你有吗?
  • 您可以随时重新编辑您的问题,而不是添加难以阅读的 cmets。
  • @KazJaw,谢谢。我更新了我原来的帖子。
  • 谁能帮我解决这个问题?
  • 问题是你写的问题的第一句话是错误的:I think this is pretty easy if you know VBA。确实,没那么容易……

标签: vba ms-word


【解决方案1】:

我没有 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
    

至于您在宏列表中看到的有关 Word 命令的问题,您可以运行这些命令,但它们的真正强大之处在于能够重新编码它们以执行您喜欢的操作。在这种情况下,您需要做的事情是由对象模型支持的,所以我不会打扰它们。

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

希望这会有所帮助。

【讨论】:

  • 谢谢,@克里斯蒂娜。现在比较文本有效。我没有使用大纲视图,是否有在默认视图中折叠标题的命令,或者我应该使用大纲模式?在宏下,我看到“单词命令”下列出了一个名为“CollapseHeading”的命令,这可能是我要找的吗?如果是这样,我该如何调用这个内置宏?
  • 默认的键盘快捷键是 Alt+Shift+- 或 Alt+Shift+Num-。我试图为这个快捷方式录制一个宏,但 VBA 编辑器中没有显示任何内容。我只需要一种在我的代码中调用它的方法,我想我已经完成了..
  • 我不确定 CollapseHeading,这可能是 Word 2013 命令,因为我没有它。我确实有 OutlineCollapse,它是 CollapseOutline 的 Word 命令等价物。不过,我不确定在大纲视图之外折叠标题意味着什么。同样,我不是每天都使用 Word 2013,但根据我的经验,您仍然需要在大纲视图中才能实际执行任何操作。明天我将尝试使用一个简短的子例程来编辑我的帖子,以说明这将如何在大纲视图中工作。
  • 这是 Word 2013 中的一项新功能。有没有一种方法可以简单地在所选内容上调用内置的 word 命令?我试图记录它,但 VBE 中没有任何显示。看看新功能:link
  • 所以,在没有正确版本的 Word 的情况下尝试回答问题对我来说是正确的。编辑了我的答案以解决 2013 年对象模型。忽略我所说的大纲视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
相关资源
最近更新 更多