文章編號: 555159 - 上次校閱: 2004年7月12日 - 版次: 1.0

如何在外部的 VBA 專案是在其中宣告它使用類別 (物件)

作者?Tushar Mehta MVP
系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

祕訣

如何在類別模組的另一個專案中宣告的物件可以使用一個 VBA 專案

作者
作者的這項秘訣是 Tushar Mehta。 您可以連接他透過他的網站: www.tushar-mehta.com
?
簡介
的使用物件導向程式設計 (OOP) 的優點之外之一是重複使用性的程式碼。 典型的方式, 要執行這項操作來執行個體化具有設定 變數 的已定義類別的物件就是 = New ClassName 語法 每當它們使用任何物件在其應用程式平台中 VBA 程式設計師使用這類物件。 範例包括 Workbook 物件在 Excel、 Presentation 物件在 PowerPoint 或 Word 文件中的物件。 除此之外, VBA 程式設計人員使用 userforms, 這是物件屬於一種特殊類型的類別。 所有這些物件是在程式庫以外的 VBA 開發人員的專案所定義。 按一下 [ 工具 ] | References? 功能表項目, 請參閱的外部程式庫, 自動在代表的開發人員建立 Visual Basic 編輯器 (VBE) 清單
?
在這個提示, 我們探索如何存取在外部程式庫由我們建立一個自訂類別。 使用下列範例是根據 Excel 2003 時, 祕訣適用於適用於 2000 版本或更新版本才支援 VBA 和其他 MS Office 產品。
?
這是自動層級中繼 / 進階秘訣, 它假設以程式設計 VB(A) 舒適某種程度。
?
有兩個不同的設定了一個 VBA 專案存取宣告在類別模組的另一個 VBA 專案的物件之前, 所需步驟。 外的專案在它被宣告為且提供一種方式, 讓物件可以具現化可用的第一個集使得在類別模組。 第二組 」 主要是在用戶端專案的方式使用這個類別會處理。
1 1:Option 選項:?
設定專案, 其中包含在類別定義
根據預設值類別模組具有 Instancing 屬性設定為 Private 。 這表示只含有之類別定義的專案, 可以為該類別的物件執行個體化。 所 VBA 支援其他選項只能是 Public, 無法建立 。 這是一個外部專案可以使用這個類別, 物件的但它無法具現化它表示哪些。 似乎奇怪, 但, 更是方法。 並將 Instancing 屬性變更為 2 - PublicNotCreatable 方式來從預設值變更屬性為在 VBE 專案總管中選取類別模組, 選取類別模組感興趣的, 存取內容 ] 視窗 (如有必要, 使用 F 4 鍵來使它可見), (必要, 使用 F 4 來使它可見), 並將 Instancing 屬性變更為 2 - PublicNotCreatable 。
?
遵守以及這項提示, 中的範例建立類別模組、 clsEmployee 命名、 變更其 Instancing 屬性, 以及將下列程式碼加入它。
?
Explicit 選項
Dim sName 為字串
以 String Get name() 屬性
??? 名稱 = sName
??? 結束屬性
Let Name(uName As String) 屬性
??? sName = uName
??? 結束屬性
?
接下來, 因為 NotCreatable, 公用類別的 Instancing 屬性是專案必須提供方法為用戶端來執行個體化物件。 在標準模組加入一個新函式:
?
Explicit 選項
New_clsEmployee() clsEmployee 作為公用函式
??? 設定 New_clsEmployee 新 clsEmployee =
??? 結束函式

其中 clsEmployee 是的感興趣的類別名稱。 也, 這不應該是私用模組。
?
最後一項變更會讓生活容易一點。 重新命名專案從預設 VBAProject 要到要執行這項操作在 VBE, [ 專案總管 ] 中選取專案, 然後選取工具 ] ClassProvider | [ 一般 ] 索引標籤 | VBAProject Properties? | 並在 [ 專案名稱 ] 欄位輸入 ClassProvider 。
?
這個檔案, 儲存, 假設為 Provider.xls 類別 。
?
接下來, 請移至用戶端專案。
1 1:Option 選項:?
設定專案, 將會使用匯出的類別
用戶端專案很使用它就像使用類別定義在任何其他的外部程式庫 (例如, 一個 userform) -- 配合金鑰不同類別。 由於它無法具現化物件的該類別, 它必須使用 New_clsEmployee() 函式宣告上方。 如同任何其他的外部程式庫, 決定是否要使用早期繫結或晚期繫結。 下面在程式碼範例中, 示範了兩個。 請記住, 若要使用早期繫結程式碼, 用戶端專案必須包含參考) References? | 工具 ] (到 Provider.xls 類別 檔案
?
Explicit 選項
Sub UseExportedClass_EarlyBinding()
??? Dim anEmployee 為 ClassProvider.clsEmployee
??? 設定 anEmployee = ClassProvider.New_clsEmployee
??? anEmployee.Name = " tushar mehta "
??? MsgBox anEmployee.Name
??? End Sub
Sub UseExportedClass_LateBinding()
??? Dim anEmployee 為物件
??? 設定 anEmployee = Application.run("'g:\temp\class Provider.xls'!new_clsEmployee")
??? anEmployee.Name = " tushar mehta "
??? MsgBox anEmployee.Name
??? End Sub
1 1:Option 選項:?
最後一個便箋
外部程式庫不一定要正常儲存檔案。 它可以位於應用程式特有的增益集 (例如, 以尾碼 . xla 或 ppa 儲存檔案)。 請記得這類的增益集已透過一般的檔案無法開啟增益 Ins? 指令 | Open? 方法與 [ 工具 ] 載入但 |
1 1:Option 選項:?
參考 : 在 MSKB 本主題的只有文件位於:
如何讓 VBA 類別模組可用的跨處理處理序
http://support.microsoft.com/default.aspx?scid=kb;en-us;244075

這篇文章中的資訊適用於:
  • Microsoft Visual Basic for Applications 6.0
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。如果您發現錯誤,並想要協助我們進行改善,請填寫本篇文章下方的問卷。
按一下這裡查看此文章的英文版本:555159? (http://support.microsoft.com/kb/555159/en-us/ )
Community Solutions Content社區解決方案內容免責聲明
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。