很多情況下,我們都需要從Excel中獲取數(shù)據(jù)來(lái)創(chuàng)建Word報(bào)表文檔。首先在Excel中分析數(shù)據(jù),然后將分析結(jié)果導(dǎo)出到Word文檔中發(fā)布。
技術(shù)實(shí)現(xiàn)方式:
1、創(chuàng)建Word模板,用來(lái)作為數(shù)據(jù)分析結(jié)果發(fā)布平臺(tái)。在Word模板中,在每個(gè)插入點(diǎn)處定義書簽。當(dāng)然,對(duì)于只導(dǎo)入一兩個(gè)數(shù)據(jù)表來(lái)說(shuō),這一步可選。
2、使用VBA,將Excel中的數(shù)據(jù)復(fù)制到Word文檔,從而形成一份報(bào)表文檔。
示例1:將Excel數(shù)據(jù)區(qū)域自動(dòng)復(fù)制到Word文檔例如,將Data工作表中A1:E8的數(shù)據(jù)自動(dòng)導(dǎo)出到Word文檔中。
第1步:創(chuàng)建一份Word文檔,本例中名為PasteTable.docx。在文檔中,在想要粘貼數(shù)據(jù)的位置插入一個(gè)名為DataTable的書簽。關(guān)閉該文檔并將其與Excel文檔放在相同的目錄中。
第2步:在Excel VBE中,創(chuàng)建對(duì)Microsoft Word Object Library的引用。選擇“工具——引用”,在引用對(duì)話框中,選擇“Microsoft Word ×.0 Object Library”。
第3步:輸入下面的代碼
Sub PopulateWordDoc1() Dim wrdApp As Word.ApplicationDim wrdDoc As Word.DocumentDim sPath As StringDim vaBookmarks As VariantDim lBookmark As Long '使用工作表數(shù)據(jù)填充書簽數(shù)組 vaBookmarks = wksBookmarks.Range("rngBookmarkList").Value '開啟Word Set wrdApp = CreateObject("Word.Application") '打開模板準(zhǔn)備填充 sPath = ThisWorkbook.Path & "\"Set wrdDoc = wrdApp.Documents.Add(Template:=sPath & "Bookmarks.dot") '使用數(shù)組中的數(shù)據(jù)填充模板中的書簽 For lBookmark = LBound(vaBookmarks, 1) To UBound(vaBookmarks, 1)wrdDoc.Bookmarks(vaBookmarks(lBookmark, LBound(vaBookmarks, 2))).Range.Text = vaBookmarks(lBookmark, UBound(vaBookmarks, 2))Next '保存被填充的文檔并關(guān)閉 wrdDoc.SaveAs sPath & "Filled1.doc"wrdDoc.CloseSet wrdDoc = Nothing '關(guān)閉Word wrdApp.Quit FalseSet wrdApp = NothingEnd Sub
Sub WordGenerateDivisionSummaries() Dim wrdApp As Word.ApplicationDim wrdDoc As Word.DocumentDim wrdrngBM As Word.RangeDim piDiv As Excel.PivotItemDim rngBookmark As Excel.RangeDim sPath As StringDim 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 In wksData.PivotTables(1).PivotFields("Division").PivotItems '填充部門名單元格 wksData.Range("ptrDivName") = piDiv.Value '重新計(jì)算工作表來(lái)更新部門的結(jié)果 wksData.Calculate '從工作表中取數(shù)據(jù)填充模板中的書簽 For Each rngBookmark In wksData.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, wrdrngBMNext rngBookmark '更新可能與書簽相鏈接的字段 wrdDoc.Fields.Update '保存填充的文檔 wrdDoc.SaveAs sPath & "Salary Results - " & piDiv.Value & ".doc"Next piDiv '關(guān)閉Word文檔 wrdDoc.CloseSet wrdDoc = Nothing '關(guān)閉Word wrdApp.Quit FalseSet wrdApp = Nothing MsgBox "Division Summaries Generated OK." Exit Sub ErrorHandler:'顯示錯(cuò)誤號(hào)和錯(cuò)誤描述 '并且在標(biāo)題欄中注明程序 MsgBox "Error " & Err.Number & vbLf & Err.Description, _vbCritical, "Routine: WordGenerateDivisionSummaries" End Sub