【问题标题】:MsWord VBA Jumping on Heading by NameMsWord VBA 按名称跳转标题
【发布时间】:2018-04-03 04:54:17
【问题描述】:

当我在 Word VBA (ActiveDocument.Hyperlinks.Add) 中添加内部链接时
我可以将标题称为 SubAddress:="_MyHeadingName" 如果您单击链接,它会跳转到那里。 这是一个证明,在 Word 中,标题是准书签。

但是: 如果我愿意,我想不出如何跳到 VBA 中的特定标题上。 (不使用 Find + .style 参数) 我希望像

Selection.GoTo what:=wdGoToHeading, Name:="_MyHeadingName" 'OR "MyHeadingName"

或者

Selection.GoTo what:=wdGoToBookmark, Name:="_MyHeadingName" 'OR "MyHeadingName"

工作并在特定标题上进行选择。
......但它没有......
有什么想法吗? (为什么不,怎么会,有什么更好的方法)


编辑(到目前为止的结论摘要):

可以使用:ActiveDocument.Bookmarks(_HeadingName).Select 跳转到 HeadingName,但前提是在此之前至少有一个超链接或隐藏的 -书签是指向该标题创建的(请参阅讨论以获取两者的示例)

【问题讨论】:

  • 你能描述一个你想这样做的场景吗?在某些细节上,例如您如何通知 VBA 它应该转到哪个标题以及这种宏以何种方式有用。我很难想象导航窗格、交叉引用或 ToC 是如何不够用的......
  • 此宏自动将关键字集合添加到文档中,在特定标题名称下。标题的位置是动态的,所以我不能用数字来引用,只能用名字来引用。我可以用 Find + style 跳上它,只是想知道是否也可以通过 Goto 之类的方法

标签: vba ms-word


【解决方案1】:

如果你想让 Find 代码更紧凑,你可以使用:

With ActiveDocument.Range.Find
  .ClearFormatting: .Style = wdStyleHeading1: .Execute FindText:="MyHeadingName", Format:=True
End With

【讨论】:

  • 是的,这是一个“准单行” :) 我认为甚至不需要“格式”,因为单行是最低要求:使用 MyRange.Find: .ClearFormatting: .Text = "MyHeadingName ": .Style = wdStyleHeading1: .Execute: 结尾
【解决方案2】:

Word 只会在标题被引用后(例如,用于交叉引用或目录)向标题添加(隐藏)书签,并且会为每种引用添加不同的书签(例如,_Ref510330670 用于交叉引用和 _Toc467495364 用于同一标题的目录条目)。

如果要转到特定标题,可以使用查找,指定标题文本和/或标题样式。在任何情况下,您都不需要为此使用 Selection - 您几乎总是可以直接处理范围。

如果您热衷于使用 Selection.Goto,则需要使用 Word 支持的功能。除非您知道该标题已被添加书签 - 以及该书签的名称是什么 - 然后,如 VBA 帮助文件中所述,您可以使用以下任一种:

Selection.GoTo What:=wdGoToHeading, Which:=wdGoToFirst
Selection.GoTo What:=wdGoToHeading, Which:=wdGoToAbsolute, Count:=1 

如果您知道标题的书签名称,您可以使用:

Selection.GoTo What:=wdGoToBookmark, Name:="bookmarkname"

您提供书签名称代替“书签名称”的位置。

【讨论】:

  • 我没有与 Select 结婚,只是在示例中使用它。我的困惑源于以下几点:在 VBA 中创建链接“c:\folder\documentdoc #HeadingName”时对我来说开箱即用。现在我想做类似的事情,但不是创建链接,而是想通过宏跳转到那里,以执行一些进一步的自动编辑,但我无法让 VBA 自己进行类似的跳转。所以寻找最简单的方法来做到这一点。
  • 正如我所说:“如果你想去一个特定的标题,你可以使用查找,指定标题文本和/或标题样式。”
  • 我们知道 find 方法,我在原帖中也提到过,但您可能对这项研究的最终结果感兴趣:您可以简单地使用 Activedocument.Bookmarks("_MyHeadingName")跳过任何特定标题,而不使用 Find。
  • 我很清楚 Activedocument.Bookmarks - 但是你不能在标题上使用它,除非它有一个书签(并不是所有可能都有一个)并且你知道那个书签的名字是什么。 .
  • 现在我很好奇。请自己尝试我上面描述的方法!对我来说,它无需创建书签即可工作,只需在名称前加上 _。你觉得怎么样?
【解决方案3】:

快速简单...

将此函数添加到模块中:

Sub jumpToBookmark(bmName As String)
    ActiveDocument.Bookmarks(bmName).Select
    Application.Selection.Collapse
End Sub

然后这样称呼它:

jumpToBookmark "myBookmark"

更多信息:

【讨论】:

  • 这听起来很有希望,我希望它适用于标题名称以及预期。我现在正在短途旅行,我会在星期一回来报告。
  • “标题名称”,格式为HeadingStyle? (或者,标题也有书签,它会通过书签名称找到它)
  • 如另一条评论中所述:当您创建链接时,您可以看到,HeadingStyles 会自动引用,独立于书签。所以 mydoc.doc #MyHeadingName 是开箱即用的。我现在想在 VBA 代码中将该功能用于其他目的,在不创建书签的情况下跳转特定标题!似乎合乎逻辑,但还不知道工作方法。
  • 我太兴奋了,我在旅行时借了一台笔记本电脑,只是为了测试一下。它有效!我确认,在没有创建任何先前的书签的情况下,Activedocument.Bookmarks("_MyHeadingName").select 正在跳转到指定的标题名称。
  • 抱歉,我需要删除 GreenTick,因为正如 #macropod 在他的 cmets 中指出的那样,此引用仅在之前创建隐藏书签时才有效 - 当在某处创建指向它的链接时。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多