填充书签 Word 页脚

Fill bookmarks Word footer

我正在使用 Excel VBA 在 Word 中填充书签。我还想更新文档页脚中的书签。只要书签不在页脚中,我的代码就可以正常工作。但是,当应该填充页脚中的书签时,我得到 Run-time error '5678' Word cannot find the requested bookmark..

我尝试在 Word 中记录代码,结果如下:

Selection.Goto What:=wdGoToBookmark, Name:=Bookmarkname

因为我在 Excel 工作,所以我将此代码更改为 wordobject = CreateObject("Word.Application"):

wordobject.Selection.Goto What:=wdGoToBookmark, Name:=Bookmarkname  

如上所述,当书签位于 'normal' 文本中时,此代码可以正常工作。只要书签位于页脚中,它就会抛出错误。

如何在 Word 文档的页脚中填充书签?

如果您手动 select 所有页脚并 运行 它,您的代码可能会起作用。 但是,您可能不喜欢这样的解决方案。一般来说,在VBA中使用Selection总是迟早会出问题。因此,对未来的自己好一点,并考虑避免它。 How to avoid using Select in Excel VBA

这是更改 Word 中任何书签文本的方法,包括页脚和页眉上的文本(仅适用于 Word):

Option Explicit
Sub TestMe()
    Dim bmk As Bookmark
    For Each bmk In ThisDocument.Bookmarks
        If bmk.Name = "wdGoToBookmark" Then
            bmk.Range.Text = "Something new here"
        End If
    Next bmk
End Sub

一般来说,要立即查看书签的信息 window,标准循环会有所帮助(仅适用于 Word):

Sub TestMe()
    Dim bmk As Bookmark
    For Each bmk In ThisDocument.Bookmarks
        Debug.Print bmk.Name
        Debug.Print bmk.Range.Text
    Next bmk
End Sub

如果你想让它从Excel工作,那么你不能在Excel中将变量定义为书签。但是像这样的事情就可以完成工作:

Public Sub TestMe()

    Dim wordObj     As Object
    Dim wordObjD    As Object

    Dim bmk         As Object
    Dim countBmks   As Long

    Set wordObj = CreateObject("Word.Application")
    Set wordObjD = wordObj.documents.Add("K:\yourPath\yourFile.docx")
    wordObj.Visible = True

    'Check whether a bookmark exists (FYI):
    Debug.Print wordObjD.bookmarks.exists("someBookmark")

    For Each bmk In wordObjD.Bookmarks
        Debug.Print bmk.Name
        Debug.Print bmk.Range.Text
        If bmk.Name = "TheNameOfTheBookmark" Then
            bmk.Range.Text = "SomeText"
        End If
    Next bmk

End Sub