大家好,我們今日講解「VBA信息獲取與處理」教程中第十五個專題「將Excel數據信息傳遞給WORD應用」的第四節「利用字典及查找替換,將Excel信息與Word模板組合」,這個專題是非常實用的知識點,希望大家能掌握利用。教程會提供配套的程序文件。
第四節 利用字典及查找替換,將Excel信息與Word模板組合
大家好,我們這節繼續學習處理EXCEL信息,實現的目的和上一講一樣,就是提取信息後用於在WORD模板中輸出。在上一講中我們利用了MailMerge方法,很多資料上翻譯此方法為郵件合併,從字面上看也是對的,但不能完全表示這種方法的功能。這裡我姑且不做翻譯了,就用英文的表達好了。這種方法雖然完成了我們的目的,但是有著很多的不足,首先是代碼複雜、不易懂,特別是對於這種方法不是很熟悉的朋友;其次,參數眾多,難免會出錯。有沒有更好的辦法呢?這講我們就講解一種我們熟悉的方法來解決,利用的是字典以及我們經常利用的查找和替換。利用這種方法,首先會大大降低代碼的難度,同時也會提高代碼的運行速度。
1 利用字典及查找替換方法實現輸出信息的思路分析
利用基本的VBA知識點來解決問題是我們追求的目標,遇到的實際問題千千萬,解決的方法有萬萬千,最容易利用的往往是基本的方法。比如字典,可以用於我們在EXCEL中提取信息的存儲,同時能直接獲得信息的條數,如果有必要還可以實現排重,是非常不錯的方法。我們不妨利用字典來提取我們的信息。
查找和替換,是指在word中進行,我們可以依次查找我們需要替換的值,然後用字典中已經存儲的信息來替換它。
為了更好的實現信息的組合和拆分,我們在字典中裝入數據的時候,不妨將各個數據以固定的符號進行分隔,然後在利用這些數據的時候,直接利用Split函數進行分解。對於本講的問題,我們不妨把條目數作為字典的鍵,信息組合作為鍵值對應。在替換word模板中特定值的時候,可以直接提取Split拆分後的數組元素即可,非常的簡單實用。
2 利用字典及查找替換方法實現輸出信息的代碼實現
思路有了,下面我們看一下代碼部分:
Sub mynzD() '利用字典以及查找替換,將excel數據與WORD模板文件合併
Dim objWord As Object, objWordNew As Object
Dim avntField As Variant
'模板文件地址給出
strCopyMyPath = ThisWorkbook.Path& "\015M模板.docx"
strNewPath = strCopyMyPath
'引用字典
Set dic = CreateObject("Scripting.Dictionary")
'給出路徑
strMyPath = ThisWorkbook.Path
'建立引用
Set objWord = CreateObject("Word.Application")
'給字典賦值
Sheets("sheet3").Select
i = 2
Do While Cells(i, 1) <> ""
'寫入鍵和鍵值,要注意寫入的方法
dic(i - 1) = Cells(i, "a") & "+" & Cells(i, "b") & "+" & Cells(i, "c") & "+" & Cells(i, "d") & "+" & Cells(i, "e")
i = i + 1
Loop
SUMI = i - 2
avntField = Array("商品編號", "收貨人", "地址", "數量", "檢驗")
'在數據間建立循環
With objWord
.Visible = True
For j = 1 To SUMI
Set objWordNew= .Documents.Open(strNewPath)
Set myRange= .ActiveDocument.Content
'字典鍵值分解
UU = Split(dic(j), "+")
For i = 0 To UBound(avntField)
myRange.Find.ExecuteFindText:=avntField(i) & "值", ReplaceWith:=UU(i), Replace:=wdReplaceAll
Next
'文件保存
.ActiveDocument.SaveAsstrMyPath& "\" & UU(0) & ".doc"
.ActiveDocument.Close True
Set objWordNew = Nothing
Next
End With
objWord.Quit
Set objWord = Nothing
Set dic = Nothing
MsgBox "文件處理完畢"
End Sub
代碼福分截圖:
代碼講解:
1)'引用字典
Set dic = CreateObject("Scripting.Dictionary")
建立代碼的引用,這時後期的綁定。
2)'給字典賦值
Sheets("sheet3").Select
i = 2
Do While Cells(i, 1) <> ""
'寫入鍵和鍵值,要注意寫入的方法
dic(i - 1) = Cells(i, "a") & "+" & Cells(i, "b") & "+" & Cells(i, "c") & "+" & Cells(i, "d") & "+" & Cells(i, "e")
i = i + 1
Loop
以上代碼將工作表中的信息放到字典中,對於字典來講,鍵放的是信息的條目數,鍵值放的是信息,信息的不同欄位用「+」分隔
3)For j = 1 To SUMI
Set objWordNew= .Documents.Open(strNewPath)
Set myRange= .ActiveDocument.Content
'字典鍵值分解
UU = Split(dic(j), "+")
For i = 0 To UBound(avntField)
myRange.Find.ExecuteFindText:=avntField(i) & "值", ReplaceWith:=UU(i), Replace:=wdReplaceAll
Next
'文件保存
.ActiveDocument.SaveAsstrMyPath& "\" & UU(0) & ".doc"
.ActiveDocument.Close True
Set objWordNew = Nothing
Next
以上代碼利用了UU = Split(dic(j), "+")將字典的鍵值進行分解,取得一個一維數組。在WORD文檔中利用Find.Execute的方法實現查找和替換,查找的內容是FindText:=avntField(i) & "值";替換的內容是ReplaceWith:=UU(i),這樣就完美地解決了數據信息輸入到word中的問題。
3 利用字典及查找替換方法實現輸出信息實現效果
我們點擊下面截圖的運行按鈕,將會得到數據信息的模板化輸出,如下面截圖的信息和輸出的文件。
實現的效果也是非常完美的。
本節知識點回向:
本例中利用字典的鍵代表信息的條目有什麼好處?② 如何讓每條信息的內容與WORD文檔結合的?
本講代碼參考文件:015工作表.xlsm
積木編程的思路內涵:
在我的系列書籍中一直在強調「搭積木」的編程思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:
1代碼不要自己全部的錄入。你要做的是把積木放在合適的位置然後去修正代碼,一定要拷貝,從你的積木庫中去拷貝,然後修正代碼,把時間利用到高效的思考上。
2 建立自己的「積木庫」。平時在學習過程中,把自己認為有用的代碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程序的思路就會越廣。
VBA的應用界定及學習教程:
VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!
我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程,目前教程均通過32位和64位兩種OFFICE系統測試。
第一套:VBA代碼解決方案是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。
第二套:VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。
第三套:VBA數組與字典解決方案數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。
第四套:VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,聽元音更易接受。這套教程還會額外提供通過32位和64位兩種OFFICE系統測試的程序文件。
第五套:VBA中類的解讀和利用這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。
第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。
上述教程的學習順序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代碼庫,供讀者使用,如需要可以WeChat: NZ9668
學習VBA是個過程,也需要經歷一種枯燥的感覺
「眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山」。學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。
「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。「路漫漫其修遠兮,吾將上下而求索」
每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:
浮雲掠過,暗語無聲,
唯有清風,驚了夢中啼鶯。
望星,疏移北鬥,
奈將往事雁同行。
阡陌人,昏燈明暗,
忍顧長亭。
多少VBA人,
暗夜中,悄聲尋夢,盼卻天明。
怎無憑!
分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。回向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,
分享成果,隨喜正能量