1

在 Word(2003 或 2007)中,有没有办法让多个文档使用一个页眉/页脚?

我希望能够在一个位置更改页眉/页脚并让它影响多个文档。

即我有 50 个文档,它们都有相同的页眉/页脚。除了打开所有 50 个文档来进行更改之外,有没有办法将 50 个文档链接(OLE?)到一个主文档并且只需要更改主文档?

如果没有内置方式,是否有人使用 VBA 完成此操作?

4

2 回答 2

2

我不确定这在实践中将如何工作,但您可以将其他文件作为链接插入到 Word 文档中。

首先创建带有页眉/页脚内容的文档,内容在文档的正文中。保存。

然后转到您的 50 个文档之一,进入页眉/页脚。转到插入 | 文件。找到第一个文件,然后单击“插入文件”对话框中“打开”按钮旁边的小下拉箭头。从下拉列表中选择插入链接。内容现在应该显示在文档中。如果你点击内容,通常它会有一个灰色的背景,表明它确实是一个 Word 字段。

现在,当您更改第一个文档时,您可以打开第二个文档,更新字段(单击其中的任意位置并按 F9),新内容将被拉入。您还可以通过编程非常简单地更新字段,或者在 TOOLS | 选项 | 打印,每次打印文档时都会有一个自动更新字段的框。

于 2009-12-22T13:59:41.570 回答
1

AFAIK 更改文档标题(简单)必须通过打开文档来完成。那就是说你有几个选择。首先,如果文档以 office XML 格式保存,那么您可以使用 MSXML 库打开文件并更改标题中的数据。(或者改变本质上是文本文件的几十种其他方法中的任何一种。)如果文件仍然是二进制格式,那么您实际上只有两个选项之一。第一种是通过 vba 打开文件并通过文档对象模型更改标题。第二个是找出二进制格式(记录在案)并使用 VB6/VBA 本机二进制 IO 更改它(非常重要)。

除非我认为我可以获得更多时间,否则我将失去编写代码来直接更改文档的过程,我可能只会遍历文件夹中的所有文件,打开它们并更改它们。至于将标题存储在某个地方......您可以将标题数据放在一个文本文件中并将其拉入。或者将文档模板保存在某个地方。

这是一个非常简单的例子:

Public Sub Example()
    Dim asFiles() As String
    Dim lFile As Long
    Dim docCrnt As Word.Document
    asFiles = GetFiles("C:\Test\", "*.doc")
    For lFile = 0& To UBound(asFiles)
        Set docCrnt = Word.Documents.Open(asFiles(lFile))
        docCrnt.Windows(1).View.SeekView = wdSeekCurrentPageHeader
        Selection.Text = "I am the header."
        docCrnt.Close True
    Next
End Sub

Public Function GetFiles( _
    ByVal folderPath As String, _
    Optional ByVal pattern As String = vbNullString _
    ) As String()

    Dim sFile As String
    Dim sFolder As String
    Dim asRtnVal() As String
    Dim lIndx As Long

    If Right$(folderPath, 1&) = "\" Then
        sFolder = folderPath
    Else
        sFolder = folderPath & "\"
    End If
    sFile = Dir(sFolder & pattern)
    Do While LenB(sFile)
        ReDim Preserve asRtnVal(lIndx) As String
        asRtnVal(lIndx) = sFolder & sFile
        lIndx = lIndx + 1&
        sFile = Dir
    Loop
    If lIndx = 0& Then
        ReDim asRtnVal(-1& To -1&) As String
    End If
    GetFiles = asRtnVal
    Erase asRtnVal
End Function
于 2009-12-22T02:02:59.523 回答