必威电竞|足球世界杯竞猜平台

Visual Basic for Applications
來源:互聯網

Visual Basic for Applications,其簡稱為VBA,是Visual Basic的一種宏語言,是微軟開發出來在其桌面應用程序中執行通用的自動化(OLE)任務的編程語言。主要用來擴展Windows的應用程序功能,特別是Microsoft Office軟件,也可說是一種應用程式視覺化的Basic腳本,實際上,VBA是寄生于VB應用程序的版本。微軟在1994年發行的Excel 5.0版本中,即具備了VBA的宏功能。因此通俗來講,VBA就是基于Office軟件的編程語言,為Visual Basic的子集,其最終成果為宏。

VBA編寫錄制的宏在Office辦公中有不可替代的作用,對于提高工作效率優勢明顯,具有以下優點:使重復的任務自動化、簡單化;可以自定義Excel工具欄、菜單和界面;可以自定義模板、報表;對數據進行復雜的操作和分析;VB基礎簡單、易學等,但不可否認,由于宏程序的易于安裝、傳播,不良人員易于制作病毒進行傳播對計算機、文檔造成損壞。同時,由于加密簡單,易于破解,其成果易于被他人竊取。

發展沿革

VisualBasicforApplications(簡稱VBA)是新一代標準宏語言,是基于VisualBasicforWindows發展而來的。它與傳統的宏語言不同,傳統的宏語言不具有高級語言的特征,沒有面向對象的程序設計概念和方法。而VBA提供了面向對象的程序設計方法,提供了相當完整的程序設計語言。VBA易于學習掌握,可以使用宏記錄器記錄用戶的各種操作并將其轉換為VBA程序代碼。這樣用戶可以容易地將日常工作轉換為VBA程序代碼,使工作自動化。

VBA是基于Visual Basic發展而來的,與VB具有相似的語言結構。從語言結構上講,VBA是VB的一個子集,它們的語法結構是一樣的。兩者的開發環境也幾乎相同。但是,VB是獨立的開發工具,它不需要依附于任何其他應用程序,它有自己完全獨立的工作環境和編譯、鏈接系統。VBA卻沒有自己獨立的工作環境,它必須依附于某一個主應用程序,VBA專門用于Office的各應用程序中,如Word、Excel、Access等。在Access中,可以通過VBA編寫模塊來滿足特定的需要。

正是由于VBA與主應用程序的這種關系,使得它與主程序之間的通信變得簡單而高效。它與AutoCAD完全共享內存空間,所以執行速度比用c語言開發的ADS應用程序要快很多。

VBA提供了面向對象的程序設計方法,提供了相當完整的程序設計語言。它的編寫是以子過程和函數為單位,在Access中以模塊形式出現。

Microsoft Office取得巨大成功的一個重要原因就是VBA,使用VBA可以完成很多事情,基于Excel、Word的VBA小程序不計其數。Office中的應用程序可以共享VBA語言,如果掌握了在Excel2016中使用VBA的方法,那么在Word、PowerPoint中使用VBA自然會變得易如反掌。掌握對VBA語言的使用,可以讓復雜的工作簡易化,減少不必要的重復性工作,大大提高我們的工作效率。

VBA程序員很多是業余程序員,正因為業余,解決的卻是工作中需要解決的問題;所以,VBA程序大多都是只是在部門內部或個人使用的小工具。集成了VBA的其他應用程序也很多,但真正能為程序增色的不多。

大多數人看到了VBA可以自動化一個程序,可以擴展已有程序,但沒有看到在Office中,VBA代碼可以是錄制的,而不是寫出來的,帶來的好處是,學習曲線變得非常緩。如果沒有宏錄制功能,要熟悉某個Office組件的對象模型,絕非一日之功。

以ArcGIS為例,ArcGIS擴展必須使用ArcObject,不管是使用VBA也罷,VB也罷,還是C++也罷。但同時,ArcObject的學習不是一天兩天可以搞定,對于業余程序員,要使用VBA來擴展ArcGIS,幾乎沒有可能;專業程序員又不屑使用VBA;而對于公司,如果要基于ArcObject來擴展ArcGIS,選擇VBA意味著源碼的保護很困難。所以,ArcGIS的VBA就如同雞肋。

VB與VBA

VBA是基于Visual Basic發展而來的,它們具有相似的語言結構。VisualBasic是微軟的主要圖形界面開發工具,VBA5.0(亦即VBA97)則是VisualBasic5.0的子集。VisualBasic是由Basic發展而來的第四代語言。VisualBasic作為一套獨立的Windows系統開發工具,可用于開發Windows環境下的各類應用程序,是一種可視化的、面向對象的、采用事件驅動方式的結構化高級程序設計語言。它具有高效率、簡單易學及功能強大的特點。VB的程序語言簡單、便捷,利用其事件驅動的編程機制,新穎易用的可視化設計工具,并使用Windows應用程序接口(API)函數,采用動態鏈接庫(DLL)、動態數據交換(DDE)、對象的鏈接與嵌入(OLE)以及開放式數據庫訪問(ODBC)等技術,可以高效、快速地編制出Windows環境下功能強大、圖形界面豐富的應用軟件系統。

Visual Basic程序很大一部分以可視(Visual)形式實現,這意味著在設計階段就可以看到程序運行的屏幕畫面,用戶可以在設計時能夠方便地改動畫面圖像、大小、顏色等,直到滿意為止。VB的用戶可以是缺乏Windows及C語言開發經驗的專業軟件人員,也可以是具有一定Windows開發經驗的專業人員,VB的可視化編程方法使得原來繁瑣枯燥、令人生畏的Windows應用程序設計變得輕松自如、妙趣橫生。以往的Windows應用程序開發工具在設計圖形用戶界面時,都是采用編程的方法,并伴隨大量的計算任務,一個大型應用程序約有90%的程序代碼用來處理用戶界面,而且在程序設計過程中不能看到界面顯示的效果,只有在程序執行時才能觀察到,如果界面效果不佳,還需要回到程序中去修改。Visual Basic提供了新穎的可視化設計工具,巧妙地將Windows界面設計的復雜性封裝起來,程序開發人員不必再為界面設計而編寫大量程序代碼,僅需采用現有工具按設計者要求的布局,在屏幕上畫出所需界面,并為各圖形對象設置屬性即可,VB自動產生界面設計代碼,這樣便將事先編制好的控件可視地連接到一起,構成一個隨時可調整的界面。

VBA不但繼承了VB的開發機制,而且VBA還具有與VB相似的語言結構,它們的集成開發環境IDE(IntergratedDevelopmentEnvironment)也幾乎相同。但是,經過優化,VBA專門用于Office的各應用程序。VB可運行直接來自Windows 95或NT桌面上的應用程序,而VBA的項目(Project)僅由使用VBA的Excel、Word、PowerPoint等稱為宿主(Host)的Office應用程序(Application)來調用。

區別

1.VB是設計用于創建標準的應用程序,而VBA是使已有的應用程序(EXCEL等)自動化。

2.VB具有自己的開發環境,而VBA必須寄生于已有的應用程序。

3.要運行VB開發的應用程序,用戶不必安裝VB,因為VB開發出的應用程序是可執行文件(*.EXE),而VBA開發的程序必須依賴于它的父應用程序,例如EXCEL。

4.VBA是VB的一個子集

盡管存在這些不同,VBA和VB在結構上仍然十分相似。事實上,如果你已經了解了VB,會發現學習VBA非常快。相應的,學完VBA會給學習VB打下堅實的基礎。而且,當學會在EXCEL中用VBA創建解決方案后,即已具備在WORDACCESSOUTLOOKFOXPROPOWERPOINT中用VBA創建解決方案的大部分知識。

*VBA一個關鍵特征是你所學的知識在微軟的一些產品中可以相互轉化。

*VBA可以稱作Microsoft Excel的“遙控器”。

主要功能

由于微軟Office軟件的普及,人們常見的辦公軟件Office軟件中的Word、Excel、Access、Microsoft Office PowerPoint都可以利用VBA使這些軟件的應用更高效率,例如:通過一段VBA代碼,可以實現畫面的切換;可以實現復雜邏輯的統計(比如從多個表中,自動生成按合同號來跟蹤生產量、入庫量、銷售量、庫存量的統計清單)等。

掌握了VBA,可以發揮以下作用:

1.規范用戶的操作,控制用戶的操作行為;

2.操作界面人性化,方便用戶的操作;

3.多個步驟的手工操作通過執行VBA代碼可以迅速的實現;

4.實現一些VB無法實現的功能。

5.用VBA制做Microsoft Excel登錄系統。

6.利用VBA可以Excel內輕松開發出功能強大的自動化程序。

操作指南

基本數據類型

即PrimaryTypeData,下述列表的括號內為字節數:

自定義的數據類型

相當于c語言的struct,例如:

Type自定義類型名元素名As類型…[元素名As類型]EndType

數組

系統定義常量

系統定義常量有3個:True、False和Null。

固有常量

固有常量是編程時引用的對象庫定義的常量。所有固有常量都可以在宏或VBA代碼中使用。通常,固有常量通過前兩個字母來指明定義該常量。來自VB庫的常量則以“vb”開頭。來自Access的常量以“ac”開頭。可以使用對象瀏覽器來查看所有對象庫中的固有常量列表。

在VBA中,常量的數據類型有整型、長整型、單精度型、雙精度型、字節型、貨幣型、字符型、日期型和邏輯型。一個整型數據就是一個整型常量,一個長整型數據就是一個長整型常量。例如,12%、-1%是整型常量,32768&、10000000&是長整型常量,-2.51、3.14是單精度實型常量,3.1415926#是雙精度實型常量,China、Shanghai是字符型常量,#07/13/2001 11:45PM#是日期常量,由符號“#”將字符括起來。

符號常量

可以自行定義的常量即符號常量,必須先定義,后使用。可見,需要聲明的常量都是符號常量。

基本語法格式:

如:GlobalConst符號常量名稱=常量值

語句功能:

定義一個符號常量,并將指定表達式的值賦給符號常量。

語句說明如下:

1)“常量名”指定符號常量的名字。符號常量名可以由字母、數字和下畫線組成,但只能以字母開頭,不能含有空格。

2)“表達式”指定符號常量的值。該表達式通常由數值型、字符型、邏輯型或日期型數據以及各種運算符組成,但在表達式中不能出現變量和函數。

3)public用來表示這個常量的作用范圍是整個數據庫的所有模塊。

4)private則表示這個常量只在使用該聲明常量語句的模塊中起作用。

說明:

1)除用戶定義的符號常量外,VBA還提供了許多符號常量,我們可以直接使用。

2)對數碼比較長,并且在程序中多次使用的常量,通常使用符號常量代替。運行程序時,系統自動把程序中的所有符號常量換為賦給它的值。

與常量一樣,變量也是一塊內存空間,用于保存程序運行過程中可能變化的數據。變量的名稱是用戶定義的一個標識符。

在代碼中需要使用該變量時,只需引用相應的標識符即可,而不用管變量當前的值具體是什么。

聲明

與用戶自定義的常量相似,變量在使用之前都需要聲明,在VBA中聲明變量的語法格式有以下幾種:

在第二種語法格式中,“變量n”的數據類型為AS關鍵字后定義的數據類型,而“變量1”、“變量2”、…的數據類型為變體型。

在VBA中,可用Dim、Private、Public和Static這4個關鍵字來聲明變量,使用不同關鍵字聲明的變量其含義也有所不同。

◆利用Dim關鍵字聲明變量:Dim關鍵字主要用來在內存中分配一塊空間,并為該空間命名,是VBA中聲明變量最常用的關鍵字。使用Dim關鍵字聲明的變量只能在當前過程或模塊中使用。

◆利用Private關鍵字聲明變量:Private關鍵字用于在類模塊中聲明一個私有變量,它只能在當前的類模塊中使用。當定義變量的位置同處于類模塊中時,其使用效果與使用Dim關鍵字定義的變量相同。

◆利用Public關鍵字聲明變量:利用Public關鍵字聲明的變量可以在程序的任何地方調用,而與聲明變量的位置無關。

◆利用Static關鍵字聲明變量:Static關鍵字用于聲明靜態變量,即變量的值在整個代碼運行期間都能被保留。

賦值

變量在使用時還需要對其進行賦值。在VBA中對變量進行賦值可通過“=”符號或“Set”關鍵字進行。通過“=”符號對變量賦值的語法格式有以下幾種。

如果在定義變量時指定了變量的數據類型,則為變量所賦的值也必須是該數據類型的值。如果變量定義為Integer類型,而在賦值時卻給了變量一個String類型的數據,則在編譯運行的過程中將彈出錯誤彈框。

運算符是在程序中執行計算功能的某些特殊符號,它是程序代碼的重要組成部分。在程序代碼中,運算符不能單獨使用,必須與其操作數共同組成表達式后才具有運算意義。VBA中的運算符包含算術運算符、連接運算符、比較運算符和邏輯運算符等。

算術運算符

算術運算符主要用于執行四則運算,僅用算術運算符連接起來的表達式稱為算術表達式。算術運算符及其作用與示例如表所示。

注意:

在執行算術運算時,運算符兩側操作的數據類型必須相同,否則會出現“類型不匹配”的錯誤提示。當“+”運算符左右兩側都是字符串類型的操作數時,執行是連接運算,如表達式“"Pass+"word"的計算結果為字符串“PassWord”。

連接運算符

連接運算符的作用是將運算符兩側的操作數連接成一個數,其操作數的數據類型通常都為String類型。VBA中的連接運算符有“&”和“+”兩種,由于使用“+”執行連接運算時,容易與加法運算混淆,所以通常都采用“&”進行連接運算。

比較運算符

比較運算符可以對運算符兩側的操作數執行比較運算,其返回結果為Boolean類型的True或False。比較運算符的操作數通常為具體的數值,當操作數為字符串或其他符號時,是根據該符號的ASCII碼進行比較的。VBA中的比較運算符及其作用與示例如表所示。

邏輯運算符

邏輯運算符用于對運算符兩側的操作數執行邏輯運算,參與邏輯運算的操作數本身可以是邏輯表達式(表達式的最終結果為True或False),也可以是算術表達式(表達式的最終返回值為0或非0)。

在邏輯運算中,數值0與邏輯值False相同,表示邏輯假;非0數值與True相同,表示邏輯真。邏輯運算符及其含義與示例如表所示。

if語句

SelectCase語句

其中的表達式列表可以為:

Do...Loop語句

For...Next語句

ForEach…Next語句

跳出本次循環的continue語句

With語句

OnError語句

具有控制作用的函數

注釋語句

使用REM或者單引號開始的行。

語句的連寫與續行

如果一行包括多條語句,用冒號分割各個語句。跨多行的語句,在行末用“空格加下劃線”表示續行

過程與函數

可以是Private、Public、Friend、Static等修飾。

調用函數/過程時,可以加括號或者不加括號。如果調用表達式作為一行的一部分,那么必須用參數,例如函數調用的返回值賦給變量。調用過程時,可以使用/不使用call關鍵字。使用call語句調用過程,如果無參數,則不加括號;如果有參數,必須加括號。如果調用時用括號包住單個參數,則該參數強行按值傳遞。需要特別注意,不用call不加括號的調用,形參與實參是傳值(passedbyvalue)而不是傳引用(passedbyreference),這會導致一些對象的方法調用失敗。

常用內置函數

VBA的常用內置函數:

參考資料 >

生活家百科家居網