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