Excel 填充书签单词页脚

Excel 填充书签单词页脚,excel,ms-word,footer,bookmarks,vba,Excel,Ms Word,Footer,Bookmarks,Vba,我正在使用Excel VBA在Word中填充书签。我还想更新文档页脚中的书签。只要书签不在页脚中,我的代码就可以正常工作。但是,当页脚中的书签应该填充时,我得到一个运行时错误'5678'Word找不到请求的书签。 我试着用Word记录代码,结果如下: Selection.Goto What:=wdGoToBookmark, Name:=Bookmarkname 由于我使用Excel,我已将此代码更改为,其中wordobject=CreateObject(“Word.Application”):

我正在使用Excel VBA在Word中填充书签。我还想更新文档页脚中的书签。只要书签不在页脚中,我的代码就可以正常工作。但是,当页脚中的书签应该填充时,我得到一个
运行时错误'5678'Word找不到请求的书签。

我试着用Word记录代码,结果如下:

Selection.Goto What:=wdGoToBookmark, Name:=Bookmarkname
由于我使用Excel,我已将此代码更改为,其中
wordobject=CreateObject(“Word.Application”)

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


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

如果您手动选择所有页脚并运行它,您的代码可能会工作。 然而,您可能并不热衷于这种解决方案。通常,在VBA中使用
选择
总是迟早会导致问题。因此,对未来的自己有利,并考虑避免它。 这是如何更改Word中任何书签的文本,包括页脚和页眉上的书签(仅适用于Word):

通常,要在即时窗口中查看书签信息,标准循环会有所帮助(仅适用于Word):

如果要使其在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

谢谢你的解决方案。我总是有麻烦不使用选择。您能解释一下“bmk.Name=“wdGoToBookmark”部分吗?书签wdGoToBookmark的名称如何?我如何查找具有我要查找的实际名称(书签名称)的书签?@Roosz0rd-书签的名称手动设置为“WDGOTOBOKMARK”。代码只是更改了书签的文本。我在“If bmk.Name=“wdGoToBookmark”上得到了一个类型不匹配,但当我使用msgbox(bmk.Name)时,它似乎是一个字符串。@Roosz0rd-这很奇怪。您是否只显式复制和粘贴了我的代码,或者还有其他内容?没有,因为我是从Excel工作的,所以此文档。书签不起作用。对于wordobject.ActiveDocument.Bookmarks中的每个bmk,如果bmk.Name为“wdGoToBookmark”,则bmk.Range.Text=sbookmarktest End,如果下一个bmk
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
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
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