問:Excel擅長數據分析和處理,而Word擅長制作精美的報告。如果將兩者結合起來,在Word中獲取Excel數據來制作報表文檔,那一定非常酷!通常,我們首先在Excel中分析和處理好數據,然后將結果導出到Word中,通過排版制作出一份有價值的精美文檔。那么,如何使用VBA將Excel數據自動放置在Word文檔中呢?
答:我們先談談實現思路,然后以不同情形下的實例來說明。
技術路線
1. 創建Word模板,用來作為數據分析結果的發布平臺。在Word模板中,在每個插入點處定義書簽。當然,對于只導入一兩個數據表來說,這一步可選。
2. 使用VBA,將Excel中的數據復制到Word文檔,從而形成一份報表文檔。
示例1:將Excel數據區域自動復制到Word文檔
如下圖所示,需要將工作表Data中單元格區域A1:E8的數據自動導出到Word文檔中。
在工作表中,定義了一個名為rngBookMarks的書簽區域I20:J22,與Word模板中的書簽相對應。將單元格J20命名為ptrDivName,在程序中更新該單元格的內容。并且,該單元格內容更新后,使用VLookup函數來更新單元格J21和J22中的內容。
創建一個Word模板,在報告中需要更改的3個位置分別定義3個書簽,如下圖所示,書簽與Excel單元格中的內容相一致。
運行代碼后,每基于Word模板生成一份文檔,都會修改模板中相應書簽位置的內容,以生成具體的文檔。
代碼如下:
SubWordGenerateDivisionSummaries()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim wrdrngBM As Word.Range
Dim piDiv As Excel.PivotItem
Dim rngBookmark As Excel.Range
Dim sPath As String
Dim sBookmarkName As String
On Error GoTo ErrorHandler
‘開啟Word
Set wrdApp =CreateObject(“Word.Application”)
sPath = ThisWorkbook.Path &”\”
‘基于模板創建新的文檔
Set wrdDoc =wrdApp.Documents.Add(Template:=sPath & “SalaryReport.dot”)
‘遍歷數據透視表中的每個部門
For Each piDiv InwksData.PivotTables(1).PivotFields(“Division”).PivotItems
‘填充部門名單元格
wksData.Range(“ptrDivName”) =piDiv.Value
‘重新計算工作表來更新部門的結果
wksData.Calculate
‘從工作表中取數據填充模板中的書簽
For Each rngBookmark InwksData.Range(“rngBookmarks”).Rows
‘獲取書簽名
sBookmarkName =rngBookmark.Cells(1, 1).Value
‘獲取書簽跨越的Word區域
Set wrdrngBM =wrdDoc.Bookmarks(sBookmarkName).Range
‘設置區域中的文本(這將刪除書簽)
wrdrngBM.Text =rngBookmark.Cells(1, 2).Text
‘重新創建書簽以便下次循環
wrdDoc.Bookmarks.Add sBookmarkName,wrdrngBM
Next rngBookmark
‘更新可能與書簽相鏈接的字段
wrdDoc.Fields.Update
‘保存填充的文檔
wrdDoc.SaveAs sPath & “SalaryResults – ” & piDiv.Value & “.doc”
Next piDiv
‘關閉Word文檔
wrdDoc.Close
Set wrdDoc = Nothing
‘關閉Word
wrdApp.Quit False
Set wrdApp = Nothing
MsgBox “Division Summaries GeneratedOK.”
Exit Sub
ErrorHandler:
‘顯示錯誤號和錯誤描述
‘并且在標題欄中注明程序
MsgBox “Error ” & Err.Number& vbLf & Err.Description, _
vbCritical, “Routine:WordGenerateDivisionSummaries”
End Sub
附:Word對象簡介
Application
Word應用程序本身,通過該對象創建、打開和保存Word文檔。
Document
Word文檔對象
Bookmark
書簽,包含在Document、Bookmarks集合中。要在書簽位置放置內容,只須指定其Range屬性的文本內容。若更改了書簽的文本內容,則刪除該書簽。
Range
文檔中某段連續區域。