以下代码是更大工作的一部分(除了这部分外,它完全按照我想要的方式工作)。 我在页脚中有一个带有文档名称的字段,这会将.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
答案 0 :(得分: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
注意:我不建议你使用评论中的建议打开页脚 - 不需要实际打开它,最好不要打开。