Word的“郵件合并”功能可以讓眾多數據自動按照自己的要求插入到文檔中。但假如又有另外一個要求:在同一個A4頁面中要打印多項數
據,這個時候“郵件合并”功能就不能滿足了,因為合并功能不能在一頁中設置多項數據(譬如完整的一個信封--包括收件人地址、收件人姓
名、寄件人地址等就被視為一頁,而不能在同一頁中打印兩份信封。)
要從Excel中引用數據,首先要知道的是其中數據單元格的表示方法。主要有兩種方式,即A1和R1C1引用樣式。前者是軟件默認的方式,即第一個字母表示表格中的列數,第二個數字表示行數,例如A1就表示A列第一個單元格。而在R1C1引用樣式中,Excel使用“R”加行數字和“C”加列數字來指示單元格的位置。例如,R1C1即指該單元格位于第1行第1列。
在Word中調用Excel數據,有兩種方式,一種是OLE(對象的鏈接和嵌入)和DDE(動態數據交換)。這里我們要講的是后面一種。DDE是一個協議,它允許兩個應用程序通過一個DDE“通道”連續自動地進行數據交換。要控制兩個應用程序之間的DDE會話,需要建立一個通道,選定一個主題,請求并傳送數據,然后關閉通道。
現在,我們有名稱為“1.xls”的Excel數據表,要將其中的數據以個人為單位在Word中打印出來。通過在Word中創建一個名稱為“獲取數據”的宏,使用DDE方法即可調用出“1.xls”中的數據。
下面就來看看具體的代碼:
Sub 獲取數據()
Dim i As Integer '代表行號
Dim j As Integer '代表列號
Dim r As String
Dim c As String
For i = 2 To 4
For j = 1 To 3
chan = DDEInitiate(app:="Excel", topic:="system") '打開一個DDE通道
DDEExecute channel:=chan, Command:="[open(" & Chr(34) & "d:.xls" & Chr(34) & ")]"
'在一個應用程序中執行打開.xls文件命令,需要指出的是,系統要求所需文件必須放在D盤。
DDETerminate channel:=chan '關閉DDE通道
chan = DDEInitiate(app:="Excel", topic:="1.xls") '打開一個DDE通道
dse = "r" + CStr(i) + "c" + CStr(j) '確定單元格位置
b = "教育碩士姓名:"
e = "準考證號:"
f = "地址:"
If j = 1 Then
a = b + Space(3) + DDERequest(channel:=chan, Item:=dse)
'需要顯示的文字加上三個空格以及按指定單元格獲取到的數據,下同
End If
If j = 2 Then
a = e + Space(3) + DDERequest(channel:=chan, Item:=dse)
End If
If j = 3 Then
a = f + Space(3) + DDERequest(channel:=chan, Item:=dse)
End If
' 通過判斷列號選擇顯示的文字
Selection.InsertAfter (a) '在鼠標停留位置插入獲得數據
With Selection.Font '對前面顯示的數據進行字體設置
.NameFarEast = "宋體"
.Name = "宋體"
.Size = 14
.Bold = True
End With
Next j
Next i
DDETerminateAll '關閉所有以及打開的DDE通道
End Sub
這是一個使用DDE的簡單例子,在WIN2K+Word2003環境下調試通過。
新聞熱點
疑難解答