【文章內(nèi)容簡介】
合文檔包含其它應(yīng)用程序創(chuàng)建的對象。例如,如果你要在Excel里嵌入一個Word文檔的話,Excel只要知道創(chuàng)建該對象需要用到的應(yīng)用程序名稱,以及該對象在屏幕上顯示的方法。組合文檔有鏈接或者對象嵌入產(chǎn)生。當(dāng)你使用手動方法來嵌入對象時,你首先要在一個應(yīng)用程序里復(fù)制它,再粘貼到另一個應(yīng)用程序里。鏈接對象和嵌入對象的主要區(qū)別是對象儲存和更新的方式。我們來試驗一下:1. 激活Word并打開任意一個文檔2. 選擇和復(fù)制任意一段文本3. 在Excel工作表里,使用下述四種方法之一將復(fù)制的文本進行粘貼: 粘貼為文本(選擇編輯|粘貼)。復(fù)制的文本就會出現(xiàn)在活動單元格(見圖92,單元格A2) 粘貼為嵌入對象(選擇編輯|選擇性粘貼,點擊“粘貼選項”按鈕,并且在清單里選擇“Microsoft Word Document 對象”。)粘貼的文本將作為一個嵌入的對象(見圖92,單元格A5)。該嵌入的對象成為了目的文件的一部分。因為該嵌入的對象沒有和原始數(shù)據(jù)鏈接,所以該信息是靜態(tài)的。當(dāng)文件源中的數(shù)據(jù)改變時,該嵌入的對象不會被更新。如果要更改嵌入的數(shù)據(jù),你就必須雙擊它,這樣就會打開該對象在源程序里編輯它。當(dāng)然,該源程序必須已經(jīng)安裝在你的電腦上了。當(dāng)你嵌入對象時,所有的數(shù)據(jù)都會存儲在目的文件里,這會導(dǎo)致文件大小顯著增大。注意,當(dāng)你嵌入一個對象后,Excel的編輯欄里將顯示:=EMBED(,) 粘貼為鏈接對象(選擇編輯|選擇性粘貼,點擊“粘貼鏈接”選項,然后在列表里選擇“Microsoft Word Document 對象”)。雖然目的文件顯示了所有的數(shù)據(jù),但是它僅僅儲存了該數(shù)據(jù)的地址。當(dāng)你雙擊該鏈接的對象時(見圖92,單元格A9),原應(yīng)用程序就會被啟動。鏈接對象是一種動態(tài)的操作,這意味著當(dāng)源文件里的數(shù)據(jù)改變時,鏈接的數(shù)據(jù)就會自動更新。因為目的文件只包含對象如何與源文件鏈接的信息,所以,對象鏈接并不會增加目的文件的大小。下面的公式是Excel用來鏈接對象的:=|39。C:\Documents and Settings\tj8147\My Documents\Tiger\VB\Excel2002_Programming\Chinese\39。!39。!OLE_LINK239。(譯者:由于文件存儲位置不同,本節(jié)的翻譯可能和你的情況不一樣,請注意分辨) 粘貼為超鏈接(選擇粘貼|超鏈接譯者:應(yīng)該為“編輯”|“粘貼為超鏈接”)粘貼的數(shù)據(jù)在工作表里顯示為帶下劃線、有顏色的文本(見圖92,單元格A11)。點擊該超鏈接,你可以快速地激活該源文件。圖92 示范鏈接和嵌入使用VBA進行鏈接和嵌入過程InsertLetter示范了如何使用程序在Excel嵌入一個Word文檔。用你自己的文件名稱代替引用“C:\”。過程InsertLetter使用AddOLEObject方法,該方法創(chuàng)建一個OLE對象,并且返回一個對表該新OLE對象的Shape對象。在VB在線幫助里面,你可以找到AddOLEObject方法可用的其它參數(shù)。1. 在當(dāng)前工程里面插入一新模塊,并重命名為OLE2. 輸入過程InsertLetter,如下所示:Sub InsertLetter() FileName:=C:\ End Sub 上面的過程打開一個新工作簿,然后嵌入該指定的Word文檔。要鏈接一個文檔的話,你就必須明確另外一個參數(shù)Link,如下所示: _ FileName:=C:\, Link:=True 技巧94 對象鏈接和嵌入當(dāng)你不得不做出決定是否使用嵌入還是鏈接對象時,只要有下列之一的條件,那么就使用嵌入: 你不在乎文檔大小,或者你有足夠的硬盤空間和內(nèi)存來處理大文件 你再也不會在其它復(fù)合文檔里使用源文件或者源文本 你想要將該文檔通過電子郵件或者磁盤發(fā)送給別人,并且確保他們能夠順利地讀取數(shù)據(jù)。(譯者:本人也傾向于使用嵌入,因為鏈接經(jīng)常會問你是否要更新鏈接,而且,很多人經(jīng)常會忘記發(fā)送源文件給別人。)COM和自動控制在自動控制后面的驅(qū)動力量是組件對象模型(COM),它決定了服務(wù)器應(yīng)用程序創(chuàng)建對象的規(guī)則,也明確服務(wù)器和控制應(yīng)用程序在使用這些對象時必須遵循的方法。COM標準包含作為自動控制界面(Automation interfaces)可用的函數(shù)集合。當(dāng)服務(wù)器應(yīng)用程序創(chuàng)建一個對象是,它會自動地制作一個和它一起可用的界面。該界面包括該對象可識別的屬性、方法和事件??刂茟?yīng)用程序不需要為了控制該對象去了解它的內(nèi)部結(jié)構(gòu),只需要知道如何操作服務(wù)器應(yīng)用程序制作的對象界面。了解綁定對于控制應(yīng)用程序與自動控制對象(服務(wù)器)來說,你必須將你的VBA過程中可用的對象和服務(wù)器實際的自動控制對象聯(lián)系起來,這個過程就叫做綁定。這里有兩種類型的綁定:后期綁定和早期綁定。你對綁定的選擇對你的應(yīng)用程序表現(xiàn)影響很大。后期綁定當(dāng)你聲明一個變量 As Object 或者As Vaiant時,VB使用的是后期綁定。后期綁定也叫運行綁定。簡單地說,后期綁定意味著VB在設(shè)計時不會將你的對象變量和自動控制對象聯(lián)系起來,而是要等到你實際運行該過程時才聯(lián)系起來。因為As Object或者As Variant的聲明在本質(zhì)上是非常普通的,所以,VB在匯編時不能決定你變量指向的對象真正具有你的VBA過程使用的屬性和方法。下面的聲明導(dǎo)致對指定對象的后期綁定:Dim mydoc As Object 后期綁定的優(yōu)勢是所有的自動控制對象都知道如何使用。后期綁定的劣勢是對內(nèi)置常量不支持。因為在設(shè)計時,VB并不知道你的對象指向的類型庫,所以,你必須通過在應(yīng)用程序文檔里查詢數(shù)值在你的代碼里定義常量。同樣,在運行時詢問應(yīng)用程序?qū)⒎怕愠绦虻膱?zhí)行。注意:后期綁定使得在另外一個應(yīng)用程序的類型庫里訪問對象稱為可能,而不需要首先建立對該對象庫的引用。如果你不肯定你的用戶是否在他們的機子上安裝了要指向的類型庫,那么就使用后期綁定。下面的過程示范如何使用后期綁定來打印Word文檔。Sub PrintWordDoc() Dim objWord As Object Set objWord = CreateObject() With objWord .Visible = True . C:\ . = False . End With Set objWord = Nothing End Sub 技巧95 這是什么類型的綁定?無論何時你使用常用的Object或Variant數(shù)據(jù)類型聲明對象變量,請考慮后期綁定。后期綁定和早期綁定的主要區(qū)別是你如何聲明你對象變量。早期綁定當(dāng)你聲明對象變量為明確的對象類型時,VB使用的是早期綁定。早期綁定也熟知為匯編綁定。這意味著VB在源代碼轉(zhuǎn)變?yōu)榭蓤?zhí)行代碼時期,就將你的對象變量和自動控制對象聯(lián)系起來了。常見的語法如下所示:Dim objectVariable As 在上面的語法中,Application是應(yīng)用程序的名稱,正如它出現(xiàn)在對象瀏覽器里的工程庫下拉清單里的樣子(例如Word和Excel)。ObjectType是對象類型(例如應(yīng)用程序,文檔,工作簿,工作表)。下面的聲明導(dǎo)致早期綁定:Dim mydoc As Dim mydoc As 早期綁定讓你能夠充分利用VB編輯器上可用的許多調(diào)試工具。例如你可以使用對象瀏覽器查找外部對象,屬性和方法。VB的自動語法檢測,自動列出成員以及自動顯示快速信息(這些都在第二章里有討論)可以讓你在編寫代碼時更快,更少出錯。另外,早期綁定允許你使用內(nèi)置常量作為方法和屬性設(shè)定的參數(shù)。因為這些常量在設(shè)計的時候在類型庫里面就是可用的,所以你不需要定義它們。這些非常方便的內(nèi)置語法檢測,智能特點和對內(nèi)置常量的支持,在后期綁定里是不可用的。雖然使用早期綁定的VBA過程執(zhí)行得更快一些,但是一些非常老的視窗應(yīng)用程序只能使用后期綁定。注意:為了使用早期綁定,你必須首先建立對對象庫的引用(參見接下來的章節(jié))。當(dāng)你確定你的用戶安裝了引用的類型庫時,就使用早期綁定。建立到對象庫的引用如果你決定通過自動控制使用早期綁定連接到另外的應(yīng)用程序的話,你首先就應(yīng)該建立對包括你要操作對象的對象庫的引用。依照下面的步驟創(chuàng)建對Microsoft Word 對象庫的引用:1. 激活VB編輯器窗口2. 在工程瀏覽器里選擇當(dāng)前工程,并且選擇“工具”|“引用”3. 在引用對話框里,選擇“可使用的引用”列表框里面的應(yīng)用程序名稱。例如,點擊Microsoft Word Object Library或者 Microsoft Word Object Library旁邊的復(fù)選框(見圖93)(譯者:這里引用的是Microsoft Word Object Library)。拉下可用引用列表框的滾動條定位該對象庫,如果你已經(jīng)安裝了某個應(yīng)用程序但是它的類型庫在可用引用列表框里面沒有出現(xiàn)的話,那么你可以點擊“瀏覽”按