【问题标题】:Fill bookmarks Word footer填写书签 Word 页脚
【发布时间】:2018-06-17 10:28:45
【问题描述】:

我正在使用 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 文档的页脚中填充书签?

【问题讨论】:

    标签: excel ms-word footer bookmarks vba


    【解决方案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
    

    【讨论】:

    • 感谢您的解决方案。我总是在不使用 select 时遇到麻烦。你能解释一下'bmk.Name =“wdGoToBookmark”'部分吗?书签 wdGoToBookmark 的名称如何,如何查找具有我要查找的实际名称 (bookmarkname) 的书签?
    • @Roosz0rd - 书签名称手动设置为“wdGoToBookmark”。该代码只是更改了书签的文本。
    • 我在 'If bmk.Name = "wdGoToBookmark" ' 上遇到类型不匹配,但是当我使用 msgbox(bmk.Name) 时,它似乎是一个字符串..
    • @Roosz0rd - 这很奇怪。您是否明确仅复制并粘贴了我的代码,或者那里还有其他内容?
    • 不,因为我使用 Excel 工作,ThisDocument.Bookmarks 将无法工作。 For Each bmk in wordobject.ActiveDocument.Bookmarks If bmk.Name is "wdGoToBookmark" Then bmk.Range.Text = sBookmarkTekst End if next bmk
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多