日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vba 定义类_VBA|工程中的四类模块的具体含义与比较

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vba 定义类_VBA|工程中的四类模块的具体含义与比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

新建一個工作簿后的VBE的工程資源管理器:

可以看到默認的3個工作表對應的模塊和工作簿模塊ThisWorkbook。

選擇sheet1,點擊“對象”列表下拉框:

可以看到一個可供選擇的Worksheet對象。

選擇該對象,將自動建立事件代碼框架,在右邊的“事件”列表中有與對象相關的事件可供選擇:

工作簿對象也中如此:

在“插入”菜單可以插入三類模塊:用戶窗體、模塊、類模塊。

用戶窗體是與用戶交互的圖形界面,窗體本身和插入的控件都是一個對象:

類模塊用于用戶自定義類和對象:

當我們錄制一個宏時,會自動在工程資源管理器中插入一個模塊,默認的名稱是“模塊1“,這是一種標準模塊,不與具體的工作表、工作簿、窗體相關聯:

這就是VBA中的四類模塊:“標準模塊”、Microsoft Excel工作簿和工作表對象、窗體、類模塊。

模塊就是一組聲明和過程。

聲明:不可執行的代碼,它命名一常數、變量或過程,并且指定其特性,比如數據類型。對于DLLprocedures,聲明指定名稱、庫和參數。

過程:命名的語句序列,可作為單元來執行。例如,Function、Property和Sub都是過程類型??偸窃谀K級別定義過程的名稱,所有可執行的代碼必須包含在過程內,一過程不能套在其它過程中。

我們平常寫的代碼是什么東西,對,就是聲明和過程,也就是在Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、模塊1、類1這些東西里面編寫的代碼,所以我們可以得出結論,Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、模塊1、類1都是模塊。

這些雖然都叫做模塊,但是卻有所不同,其實微軟是這樣分類的:

文檔模塊:Sheet1,Sheet2,Sheet3,ThisWorkbook;

窗體模塊:UserForm1;

標準模塊:模塊1;

類模塊:類1;

有人可能會問,sheet1、sheet2這些本身就是微軟為我們提供的內置對象,怎么能說是模塊呢?誠然,在我們編寫代碼的過程中,它們確實是不同的對象。但是,由于微軟單獨把這些東西提取了出來,允許我們編寫代碼與這些對象進行關聯,所以他們就具有了不同的意義,可以看作是微軟自定義并已經嵌入的模塊。由于我們能在他們內部編寫并儲存代碼,所以,在這里,你就不要像看待range、cell等對象那樣看待他們,而是要做為模塊來看待他們。(這種思路的轉變很重要,他們在這里我們是當作模塊看待,而不是我們常用的對象)。

其實,作為VBA語言,來源于VB,所以他繼承了VB語言的大部分功能,只不過微軟單獨為VBA提供了Excel對象(或者Word對象、PPT對象等等)。因為在VB中本身就提供了三種類型的模塊:窗體模塊、標準模塊和類模塊。所以VBA中就有了這三種模塊。為了能夠對Excel對象進行操作,微軟又為我們提供了文檔模塊,而且是直接嵌入進來的(Sheet1、Sheet2、ThisWorkbook這些文檔模塊不需要我們插入,只要存在這個對象,就有這個文檔模塊)。所以,也就解釋了,VBA為什么會有這四種模塊。

我們通過上面的分析了解到了VBA的模塊分為這四種,從什么地方可以看出微軟是這樣分類的呢,他們到底是不是對象(請一定和Excel模型中的Sheet1、Sheet2對象的概念分開,記住,在這里,他們已經是模塊啦),他們到底是什么對象呢?

從VBE資源管理器我們看出Microsoft Excel對象(文檔模塊)、窗體(窗體模塊)、模塊(標準模塊)、類模塊這些模塊都在什么下邊呢,對,都在在VBA Project的下面:

VBA Project是什么呢,就是我們平常說得工程,實際上他是VBA Project對象,他下面的這些Microsoft Excel對象(文檔模塊)、窗體(窗體模塊)、模塊(標準模塊)、類模塊也都是對象,是什么對象呢,VB Component對象。現在可以告訴你,這些模塊就是對象,是叫做VB Component的對象。

為了說明這個問題,需要引入一個概念,VBA擴展模型(VBA Extensibility Model),他具有對VBA工程和模塊進行操作的功能:

(1)用代碼添加和刪除VBA模塊(而不是手動插入和刪除);

(2)用代碼去創建代碼(說起來有點繞,應該是用代碼建立個模塊,然后用代碼在模塊里面寫代碼);

(3)創建用戶窗體;

VBA擴展模型的簡單層次結構是這樣(只為說明問題,沒有全部列出來):

VBE

VB Project

VB Component

Code Module

Designer

Property

Reference

Window

CommandBar

其實VB Project對象就是我們在工程資源管理器經常看到的,下面的Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、模塊1、類1就是VB Component對象。在這里我們得出了一個結論:文檔模塊、標準模塊、類模塊、窗體模塊是對象,一種叫做VB Component的對象

VBComponent對象有個type屬性,清楚的告訴了我們Sheet1、Sheet2、Sheet3、ThisWorkbook、UserForm1、模塊1、類1分別屬于什么模塊,也就是上面所說的,微軟是怎么對這些模塊進行分類的呢,也就是type屬性來告訴了我們這個問題。

我們用以下代碼來展示這些模塊都屬于哪些類型。

Sub test()Dim VBComps As VBComponents ‘定義VBComponents類的對象變量Dim VBComp As VBComponent ‘定義VBComponent類的對象變量‘這里我們借用了Thisworkbook這個對象來說明Set VBComps = ThisWorkbook.VBProject.VBComponents ‘將對象的引用賦值給對象變量‘利用循環來獲取工程內每個組件的名稱和類型For Each VBComp In VBCompsMsgBox "組件名稱:" & VBComp.name & " 組件常量" & VBComp.TypeNextEnd Sub

通過代碼的運行,我們發現Sheet1、Sheet2、Sheet3、Thisworkbook是一種類型,部件常數的值是100。

模塊1是一種類型,部件常數的值是1;

類1是一種類型,部件常數的值是2;

UserForm1是一種類型,部件常數的值是3;

通過上面的敘述,總結起來只是一句話:

文檔模塊、標準模塊、類模塊、窗體模塊是對象,并且都是一個叫做VBComponent的對象,根據VBComponent屬性"type"(類型)的不同,微軟把他們分為了4類:Vbext_ct_StdModule、Vbext_ct_ClassModule、Vbext_ct_MSForm、Vbext_ct_Document。

VB的代碼存儲在模塊中。在VB中提供了三種類型的模塊:窗體模塊、標準模塊和類模塊。

簡單的應用程序可以只有一個窗體,所用的程序都駐留在窗體模塊中,而當應用程序龐大復雜時,就要另外附加窗體。最終可能有幾個窗體中有一些共同都要執行的代碼,為了在兩個窗體中不產生重復代碼,可創建一個獨立的模塊,用它實現代碼公用。該獨立模塊即是標準模塊。此外還可以建立包含共享代碼與數據的類模塊。

1 窗體模塊

由于VB是面向對象的應用程序開發工具,所以應用程序的代碼結構就是該程序在屏幕上表示的對應模型。根據定義,對象包含數據和代碼。應用程序中的每個窗體都有一個相對應的窗體模塊(文件擴展名為.frm)

窗體模塊是VB應用程序的基礎。窗體模塊可以包含處理事件的過程、通用過程以及變量、常數、自定義類型和外部過程的窗體級聲明。寫入窗體模塊的代碼是該窗體所屬的具體應用程序專用的;也可以引用該程序內的其它窗體和對象

每個窗體模塊都包含事件過程,在事件過程中有為響應該事件而執行的程序段。窗體可包含控件。在窗體模塊中,對窗體上的每個控件都有一個對應的事件過程集。除了事件過程,窗體模塊還可包含通用過程,它對來自該窗體中任何事件過程的調用都作出響應。

2 標準模塊

標準模塊是程序中的一個獨立容器,包含全局變量、Function(函數)過程和Sub過程(子過程)。

可將那些與特定窗體或控件無關的代碼放入標準模塊中。標準模塊中包含應用程序內的允許其它模塊訪問的過程和聲明。它們可以包含變量、常數、類型、外部過程和全局聲明或模塊級聲明。

3 類模塊

在VB中類模塊是面向對象編程的基礎。可以在類模塊中編寫代碼建立新對象。這些新對象可以包含自定義的屬性和方法。實際上,窗體正是這樣一種類模塊,在其上可安放控件,可顯示窗體窗口。

用類模塊創建對象,這些對象可被應用程序內的過程調用。標準模塊只包含代碼,而類模塊包含代碼又包含數據,可視為沒有物理表示的控件。

4 標準模塊和對象模塊的區別

文檔模塊、窗體模塊是屬于對象模塊的,可以作為一類,標準模塊則是不同的,屬于另外一類。

4.1 標準模塊是不支持事件,對象模塊都支持事件過程。

標準模塊本身是沒有事件過程的,這也就是說,你想寫事件過程,絕對不要寫到標準模塊中去,當然你也寫不進去。

4.2 標準模塊是一個獨立容器,標準模塊中的全局變量、Function(函數)過程和Sub過程(子過程)是不與對象模塊相關聯的。

同一個工程中的對象模塊可以共享和使用標準模塊中的全局變量和過程。但是對象模塊的變量和過程,卻是該對象模塊專屬的。如果想調用的話,必須以對象的方式訪問。

這也就告訴我們一個原則。通常我們在寫VBA代碼的時候,應該把公用的變量和過程寫到標準模塊中來,和對象模塊相關的變量和過程寫到相應的對象模塊中去,這樣才不容易出現問題。

-End-

總結

以上是生活随笔為你收集整理的vba 定义类_VBA|工程中的四类模块的具体含义与比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。