【问题标题】:Word VBA run action in footer only and not anywhere elseWord VBA 仅在页脚中运行操作,而不在其他任何地方运行
【发布时间】:2016-07-18 17:49:00
【问题描述】:

下面的代码是一个更大的工作的一部分(除了这部分之外,它完全按照我想要的方式工作)。 我在页脚中有一个带有文档名称的字段,这使 .doc/.docx 脱离了结尾。 问题在于,该代码似乎还使用文档名称更新文档正文中的任何链接,例如如果文档中的链接是 www.google.co.uk,则此宏会将文档上的链接更改为文档的名称 - 我希望这只发生在页脚中。

您能否就如何获取此代码来执行此操作提供建议?我尝试了几种不同的方法,但都没有奏效。

        oldFilename = wdDocTgt.Name
         If Right(oldFilename, 5) = ".docx" Then
        oldFilename = Left(oldFilename, Len(oldFilename) - 5)
        ElseIf Right(oldFilename, 4) = ".doc" Then
        oldFilename = Left(oldFilename, Len(oldFilename) - 4)
 '       MsgBox (oldFilename)   'UNCOMMENT TO TEST

            'Updates all fields in the target document with the file name
 For Each aStory In wdDocTgt.StoryRanges
    For Each aField In aStory.Fields
    aField.Result.Text = oldFilename
        Next aField
        Next aStory

【问题讨论】:

  • 您需要打开页脚,然后执行您的步骤。 ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter

标签: vba ms-word footer


【解决方案1】:

您的代码的问题在于它正在处理文档的所有部分——这是您不想要的。您只需要页脚。 Word 文档可以有许多页脚,具体取决于文档有多少节以及节中的页脚是否已与前面的节取消链接。因此,如果您想检查所有页脚,则需要循环所有部分,例如

Dim sec as Word.Section
Dim rngFooter as Word.Range
For each sec in ActiveDocument.Sections
  Set rngFooter = sec.Footers(wdHeaderFooterPrimary).Range
  For each field in rngFooter.Fields
    aField.Result.Text = oldFilename
  Next field
Next sec

但请记住,这将解决页脚中的 所有 字段,因此最终会影响您可能拥有的任何页码或日期...

您使用的方法还有另一个问题:字段代码会更新,当它们更新时,您写给它们的任何内容(就像您在代码中所做的那样)都将丢失。因此,当您打印此文档或某些其他操作触发域代码更新时,您可能会遇到非常不愉快的意外。

由于您不依赖域代码自动生成文档名称,因此请勿使用域代码(无论它是什么)。删除域代码并改用书签。然后您可以将文档名称分配给书签,如下所示:

Dim rngBkm as Word.Range
Dim sBkmName as String
sBkmName = "DocName"
If ActiveDocument.Bookmarks.Exists(sBkmName) Then
  Set rngBkm = ActiveDocument.Bookmarks(sBkmName)
  rngBkm.Text = oldFileName
  'Assigning the text deletes the bookmark, so add it back
  ActiveDocument.Bookmarks.Add sBkmName, rngBkm
End If

注意:我不建议您使用评论中的建议打开页脚 - 无需实际打开它,最好不要。

【讨论】:

  • 嗨,我如何让页脚在第 2 页和第 3 页的页脚中包含 DocName 等。每个文档我只能有一个名为 DocName 的书签(如果我错了,请纠正我)!
  • 好吧,如果这是 Word 的页脚(而不仅仅是页面底部的位置),那么您放在那里的任何内容都会在整个文档中重复出现,在每一页上。这就是页眉和页脚的优势 :-) 如果您不希望每个页面上都有内容,事情只会变得棘手......如果您不希望它出现在 first 页面上,那么您需要激活文档中的“不同的首页”选项。 (注意:此代码不会写入“不同的第一页”。)
猜你喜欢
  • 1970-01-01
  • 2019-09-29
  • 2014-06-25
  • 1970-01-01
  • 2021-03-01
  • 2011-06-30
  • 1970-01-01
  • 2020-09-23
  • 2020-11-15
相关资源
最近更新 更多