2009-12-21 47 views
1

Inside Word(2003或2007),有沒有辦法讓一個頁眉/頁腳使用文檔?多文檔使用的一箇中心頁眉/頁腳(Word 2003或2007)

我希望能夠在一個地方更改頁眉/頁腳並使其影響多個文檔。

即我有50個文件,它們都有相同的頁眉/頁腳。有沒有辦法將50個文檔鏈接(OLE?)到主文檔,而只需要更改主文檔?

如果沒有內置的方法,是否有人使用VBA完成了這項工作?

回答

2

我不知道這將如何在實踐中工作,但你可以插入其他的文件到Word文檔的鏈接。

首先創建帶有頁眉/頁腳內容的文檔,並在文檔正文中添加內容。保存。

然後轉到您的50個文檔之一,進入頁眉/頁腳。轉到INSERT |文件。找到第一個文件,然後單擊「插入文件」對話框中「打開」按鈕旁邊的小下拉箭頭。從下拉菜單中選擇INSERT AS LINK。內容現在應該顯示在文檔中。如果你點擊內容,通常它會有一個灰色的背景,以表明它確實是一個Word字段。

現在,當您更改第一個文檔時,您可以打開第二個文檔,更新該字段(單擊其中的任意位置並按F9),並將新內容拉入。您還可以通過編程方式更新字段,在工具|下選項|打印,每當打印文檔時都會自動更新字段。

+0

非常感謝。這將工作。一個額外的注意事項,在Word 2007中插入|文件位置已更改。它現在位於「插入」選項卡的「文本」組中,稱爲「對象」。點擊它將打開「對象」對話框,您可以在其中選擇「從文件創建」選項卡並輸入您想要鏈接的.docx文件。它工作得很好。我看到的下一個問題是我想分享這些文件將其他三個人和鏈接有一個完整的路徑,我希望它是一個相對路徑。 – 2009-12-28 14:47:30

+0

我懷疑你可以做任何事情。 Word喜歡使用完整的UNC存儲路徑。 – 2010-01-05 16:40:35

1

AFAIK必須通過打開文檔來更改文檔標題(簡單地說)。這就是說你有幾個選擇。首先,如果文檔以辦公室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 
相關問題