填写书签Word页脚

时间:2018-01-08 12:32:47

标签: excel excel-vba word-vba footer bookmarks vba

我正在使用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  

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

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

1 个答案:

答案 0 :(得分:1)

如果您手动选择所有页脚并运行它,您的代码可能会有效。 但是,您可能不喜欢这样的解决方案。通常,在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

通常,要查看即时窗口中书签的信息,标准循环可以提供帮助(仅适用于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