Mail Merge郵件合併 這個功能只聽名字實在有點不知所云,
主頁君認為這項功能的誕生應該是為了更簡單製作信件吧,
商業信件或者邀請函大多內容相似,僅有收件人、地址等部分不同,只需一一複製貼上便可,那如果收信人有一千幾百,
實在不是什麼好玩的事,此時若是用上Mail Merge,就可以減少大量重覆的勞動、大大節省時間了。
就像以下的這封信函(信從網絡中隨機截取),只需修改紅色的部份就可以生成一封新的信件,此時就可使用Mail Merge了:
第一步‧創建Eecel與Word的連接
你可以選擇Excel中的其中一個工作表作為資料來源
第二步‧創建你需要的格式,並插入數據
插入數據之前,記得要把光標先放在所需位置
完成後就可以預覽結果,如果沒有問題就可以直接生成新文件了哦,
原有的文件亦可儲存以後再用,那之後便可一鍵Mail Merge了哦。
DDE比Mail Merge複雜多了,但可應用得更廣,主頁君現在還在摸索階段,現在只能初步的獲取數據而已。
DDE與Mail Merge相比,可保留Excel中數據的格式,使數據更專業準確。
DDE需要編寫程序,也就是使用巨集,巨集的內容可參考前文:
[VBA]Excel巨集的應用(1)--巨集的認識與初始置 @ 【4NGus懶人筆記 :: 痞客邦 PIXNET ::
http://dressing2k.pixnet.net/blog/post/110053349
。
是時候奠出DDE最基礎的程序了。
第一步‧開啟DDE通道並利用通道打開要用到的試算表,只要修改粗體部分就可以了:
chan = DDEInitiate(App:="Excel", Topic:="system")
DDEExecute channel:=chan, Command:="[open(" & Chr(34) & "C:\書目.xlsx" & Chr(34) & ")]" 'Command:=[open("路徑、文件名及其後綴")] chr(34)即是"的ASCII CHR碼
DDETerminate channel:=chan'關閉通道
第二步‧將相關的試算表賦值為chan,使用時同樣只要修改粗體部分就可以了:
chan = DDEInitiate(App:="Excel", Topic:="書目.xlsx")
a = DDERequest(channel:=chan, Item:=位置)'若是A1可用"r1c1"來表示
第三步‧關閉所有通道,DDE是很佔用資源的,而且不可以同時開多個通道(上限是多少也還在摸索中):
DDETerminateAll
具體的用法與例子:
我的Excel表: 書目.xlsx
我的程序(程序在VB界面中比較好看,附上截圖和程序了):
Sub PrntOut()
'
' PrintOut 巨集
'
'
Dim i As Integer '行
Dim j As Integer '列
Dim s(5) As String 's陣列儲存標題
Dim a As String '暫存從excel中獲取的結果
Dim dse As String '暫存位置(行列)
chan = DDEInitiate(App:="Excel", Topic:="system")
DDEExecute channel:=chan, Command:="[open(" & Chr(34) & "C:\書目.xlsx" & Chr(34) & ")]" '利用通道打開所需的試算表
DDETerminate channel:=chan
chan = DDEInitiate(App:="Excel", Topic:="書目.xlsx") '將試算表
For j = 1 To 5
dse = "r1c" + CStr(j)
s(j) = DDERequest(channel:=chan, Item:=dse)
Next j
For i = 2 To 15
For j = 1 To 5
dse = "r" + CStr(i) + "c" + CStr(j)
a = s(j) & Space(3) & DDERequest(channel:=chan, Item:=dse)
Selection.InsertAfter (a) '在光標處插入a
Next j
Next i
DDETerminateAll '關閉所有DDE通道
End Sub
結果是(因為我的程序中只歷遍到第五列,所以沒有評分的結果):
因為是要利用程序,所以格式之類的設置比較麻煩,沒有Mail Merge之類的方便。
但一次設置就可續用很久,如果資料經常改變但數據源沒變的話,DDE可能比Mail Merge更耐用。
而且巨集要是設置好的話,只需一鍵便可執行,更方便與電腦不太擅長的用戶共用。
留言列表