共找到2條詞條名為VBA的結果 展開

VBA

Visual Basic宏語言

VisualBasicforApplications(VBA)是VisualBasic的一種語言,是微軟開發出來在其桌面應用程序中執行通用的自動化(OLE)任務的編程語言。主要能用來擴展Windows的應用程序功能,特別是MicrosoftOffice軟體。

也可說是一種應用程式視覺化的Basic腳本。該語言於1993年由微軟公司開發的的應用程序共享一種通用的自動化語言--------VisualBasicforApplication(VBA),實際上VBA是寄生於VB應用程序的版本。微軟在1994年發行的Excel5.0版本中,即具備了VBA的宏功能。

發展沿革


VisualBasicforApplications(簡稱VBA)是新一代標準宏語言,是基於VisualBasicforWindows發展而來的。它與傳統的宏語言不同,傳統的宏語言不具有高級語言的特徵,沒有面向對象的程序設計概念和方法。而VBA提供了面向對象的程序設計方法,提供了相當完整的程序設計語言。VBA易於學習掌握,可以使用宏記錄器記錄用戶的各種操作並將其轉換為VBA程序代碼。這樣用戶可以容易地將日常工作轉換為VBA程序代碼,使工作自動化。
VBA是基於Visualbasic發展而來的,與VB具有相似的語言結構。從語言結構上講,VBA是VB的一個子集,它們的語法結構是一樣的。兩者的開發環境也幾乎相同。但是,VB是獨立的開發工具,它不需要依附於任何其他應用程序,它有自己完全獨立的工作環境和編譯、鏈接系統。VBA卻沒有自己獨立的工作環境,它必須依附於某一個主應用程序,VBA專門用於Office的各應用程序中,如Word、Excel、Access等。在Access中,可以通過VBA編寫模塊來滿足特定的需要。
正是由於VBA與主應用程序的這種關係,使得它與主程序之間的通信變得簡單而高效。它與AutoCAD完全共享內存空間,所以執行速度比用C語言開發的ADS應用程序要快很多。
VBA提供了面向對象的程序設計方法,提供了相當完整的程序設計語言。它的編寫是以子過程和函數為單位,在Access中以模塊形式出現。
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是基於VisualBasic發展而來的,它們具有相似的語言結構。VisualBasic是Microsoft的主要圖形界面開發工具,VBA5.0(亦即VBA97)則是VisualBasic5.0的子集。VisualBasic是由Basic發展而來的第四代語言。VisualBasic作為一套獨立的Windows系統開發工具,可用於開發Windows環境下的各類應用程序,是一種可視化的、面向對象的、採用事件驅動方式的結構化高級程序設計語言。它具有高效率、簡單易學及功能強大的特點。VB的程序語言簡單、便捷,利用其事件驅動的編程機制,新穎易用的可視化設計工具,並使用Windows應用程序介面(API)函數,採用動態鏈接庫(DLL)、動態數據交換(DDE)、對象的鏈接與嵌入(OLE)以及開放式資料庫訪問(ODBC)等技術,可以高效、快速地編製出Windows環境下功能強大、圖形界面豐富的應用軟體系統。
VisualBasic程序很大一部分以可視(Visual)形式實現,這意味著在設計階段就可以看到程序運行的屏幕畫面,用戶可以在設計時能夠方便地改動畫面圖像、大小、顏色等,直到滿意為止。VB的用戶可以是缺乏Windows及C語言開發經驗的專業軟體人員,也可以是具有一定Windows開發經驗的專業人員,VB的可視化編程方法使得原來繁瑣枯燥、令人生畏的Windows應用程序設計變得輕鬆自如、妙趣橫生。以往的Windows應用程序開發工具在設計圖形用戶界面時,都是採用編程的方法,並伴隨大量的計算任務,一個大型應用程序約有90%的程序代碼用來處理用戶界面,而且在程序設計過程中不能看到界面顯示的效果,只有在程序執行時才能觀察到,如果界面效果不佳,還需要回到程序中去修改。VisualBasic提供了新穎的可視化設計工具,巧妙地將Windows界面設計的複雜性封裝起來,程序開發人員不必再為界面設計而編寫大量程序代碼,僅需採用現有工具按設計者要求的布局,在屏幕上畫出所需界面,並為各圖形對象設置屬性即可,VB自動產生界面設計代碼,這樣便將事先編製好的控制項可視地連接到一起,構成一個隨時可調整的界面。
VBA不但繼承了VB的開發機制,而且VBA還具有與VB相似的語言結構,它們的集成開發環境IDE(IntergratedDevelopmentEnvironment)也幾乎相同。但是,經過優化,VBA專門用於Office的各應用程序。VB可運行直接來自Windows95或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可以稱作EXCEL的“遙控器”。

主要功能


VBA6
VBA6
由於微軟Office軟體的普及,人們常見的辦公軟體Office軟體中的Word、Excel、Access、Powerpoint都可以利用VBA使這些軟體的應用更高效率,例如:通過一段VBA代碼,可以實現畫面的切換;可以實現複雜邏輯的統計(比如從多個表中,自動生成按合同號來跟蹤生產量、入庫量、銷售量、庫存量的統計清單)等。
掌握了VBA,可以發揮以下作用:
1.規範用戶的操作,控制用戶的操作行為;
2.操作界面人性化,方便用戶的操作;
3.多個步驟的手工操作通過執行VBA代碼可以迅速的實現;
4.實現一些VB無法實現的功能。
5.用VBA製做EXCEL登錄系統。
6.利用VBA可以Excel內輕鬆開發出功能強大的自動化程序。

操作指南


基本數據類型

即PrimaryTypeData,下述列表的括弧內為位元組數:
● Byte(1):無符號數類型,取值範圍0-255
● Boolean(2)
● Integer(2)
● Long(4)
● Single(4)
● Double(8)
● Currency(8)
● Decimal(14)
● Date(8)
● String
● Object(4)
● Variant(根據分配確定)

自定義的數據類型

相當於C語言的struct,例如:
Type自定義類型名元素名As類型…[元素名As類型]EndType

數組

● OptionBase0:數組索引值從0開始
● OptionBase1:數組索引值從1開始
● DimMyArray(10):聲明一個數組變數,10是最大的可用的數組索引值
● MyArray(5)=101:給數組的元素賦值
● DimData(10,5):聲明一個二維數組變數
● Data(1,1)="A001":給數組元素賦值
● DimcArr(-11To20,1To3)AsString:聲明一個數組,定義數組索引值的上下界
● DimdArr()AsString:聲明動態數組
● ReDimdArr(0To5,1To2):改變動態數組的尺寸默認把原數據清除。如果保留原來的數據,必須加上參數
● Preserve:使用Preserve參數時只能改變最後一位的大小
● IfUBound(vTemp)=-1Then:判斷數組變數vTemp是否為空數組
● EndIfEraseMyArrar,DataErase語句清除數組元素,釋放變數佔用的空間

系統定義常量

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

固有常量

固有常量是編程時引用的對象庫定義的常量。所有固有常量都可以在宏或VBA代碼中使用。通常,固有常量通過前兩個字母來指明定義該常量。來自VB庫的常量則以“vb”開頭。來自Access的常量以“ac”開頭。可以使用對象瀏覽器來查看所有對象庫中的固有常量列表。
在VBA中,常量的數據類型有整型、長整型、單精度型、雙精度型、位元組型、貨幣型、字元型、日期型和邏輯型。一個整型數據就是一個整型常量,一個長整型數據就是一個長整型常量。例如,12%、-1%是整型常量,32768&、10000000&是長整型常量,-2.51、3.14是單精度實型常量,3.1415926#是雙精度實型常量,China、Shanghai是字元型常量,#07/13/200111:45PM#是日期常量,由符號“#”將字元括起來。

符號常量

可以自行定義的常量即符號常量,必須先定義,后使用。可見,需要聲明的常量都是符號常量。
基本語法格式:
1[Publicr/Private]Const常量名[As類型]=表達式
如:GlobalConst符號常量名稱=常量值
語句功能:
定義一個符號常量,並將指定表達式的值賦給符號常量。
語句說明如下:
1)“常量名”指定符號常量的名字。符號常量名可以由字母、數字和下畫線組成,但只能以字母開頭,不能含有空格。
2)“表達式”指定符號常量的值。該表達式通常由數值型、字元型、邏輯型或日期型數據以及各種運算符組成,但在表達式中不能出現變數和函數。
3)public用來表示這個常量的作用範圍是整個資料庫的所有模塊。
4)private則表示這個常量只在使用該聲明常量語句的模塊中起作用。
說明:
1)除用戶定義的符號常量外,VBA還提供了許多符號常量,我們可以直接使用。
2)對數碼比較長,並且在程序中多次使用的常量,通常使用符號常量代替。運行程序時,系統自動把程序中的所有符號常量換為賦給它的值。
與常量一樣,變數也是一塊內存空間,用於保存程序運行過程中可能變化的數據。變數的名稱是用戶定義的一個標識符。
在代碼中需要使用該變數時,只需引用相應的標識符即可,而不用管變數當前的值具體是什麼。

聲明

與用戶自定義的常量相似,變數在使用之前都需要聲明,在VBA中聲明變數的語法格式有以下幾種:
● 關鍵字變數名AS數據類型
● 關鍵字變數1,變數2...變數nAS數據類型
● 關鍵字變數1AS數據類型,變數2As數據類型,...,變數nAS數據類型
在第二種語法格式中,“變數n”的數據類型為AS關鍵字后定義的數據類型,而“變數1”、“變數2”、…的數據類型為變體型。
在VBA中,可用Dim、Private、Public和Static這4個關鍵字來聲明變數,使用不同關鍵字聲明的變數其含義也有所不同。
◆利用Dim關鍵字聲明變數:Dim關鍵字主要用來在內存中分配一塊空間,並為該空間命名,是VBA中聲明變數最常用的關鍵字。使用Dim關鍵字聲明的變數只能在當前過程或模塊中使用。
◆利用Private關鍵字聲明變數:Private關鍵字用於在類模塊中聲明一個私有變數,它只能在當前的類模塊中使用。當定義變數的位置同處於類模塊中時,其使用效果與使用Dim關鍵字定義的變數相同。
◆利用Public關鍵字聲明變數:利用Public關鍵字聲明的變數可以在程序的任何地方調用,而與聲明變數的位置無關。
◆利用Static關鍵字聲明變數:Static關鍵字用於聲明靜態變數,即變數的值在整個代碼運行期間都能被保留。

賦值

變數在使用時還需要對其進行賦值。在VBA中對變數進行賦值可通過“=”符號或“Set”關鍵字進行。通過“=”符號對變數賦值的語法格式有以下幾種。
● 變數名=數據
● 變數1=變數2運算符數據
● 變數1=變數2運算符變數3…運算符變數n
如果在定義變數時指定了變數的數據類型,則為變數所賦的值也必須是該數據類型的值。如果變數定義為Integer類型,而在賦值時卻給了變數一個String類型的數據,則在編譯運行的過程中將彈出錯誤彈框。
運算符是在程序中執行計算功能的某些特殊符號,它是程序代碼的重要組成部分。在程序代碼中,運算符不能單獨使用,必須與其操作數共同組成表達式后才具有運算意義。VBA中的運算符包含算術運算符、連接運算符、比較運算符和邏輯運算符等。

算術運算符

算術運算符主要用於執行四則運算,僅用算術運算符連接起來的表達式稱為算術表達式。算術運算符及其作用與示例如表所示。
例子名稱結果
-$a取反$a的負值。
$a+$b加法$a和$b的和。
$a-$b減法$a和$b的差。
$a*$b乘法$a和$b的積。
$a/$b除法$a除以$b的商,允許小數。
$a\$b除法$a除以$b的商,結果取整。
$aMod$b取余$a除以$b的餘數
注意:
在執行算術運算時,運算符兩側操作的數據類型必須相同,否則會出現“類型不匹配”的錯誤提示。當“+”運算符左右兩側都是字元串類型的操作數時,執行是連接運算,如表達式“"Pass+"word"的計算結果為字元串“PassWord”。

連接運算符

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

比較運算符

比較運算符可以對運算符兩側的操作數執行比較運算,其返回結果為Boolean類型的True或False。比較運算符的操作數通常為具體的數值,當操作數為字元串或其他符號時,是根據該符號的ASCII碼進行比較的。VBA中的比較運算符及其作用與示例如表所示。
例子名稱結果
$a=$b等於TRUE,如果$a等於$b。
$a<>$b不等TRUE,如果$a不等於$b。
$a<$b小於TRUE,如果$a嚴格小於$b。
$a>$b大於TRUE,如果$a嚴格大於$b。
$a<=$b小於等於TRUE,如果$a小於或者等於$b。
$a>=$b大於等於TRUE,如果$a大於或者等於$b。

邏輯運算符

邏輯運算符用於對運算符兩側的操作數執行邏輯運算,參與邏輯運算的操作數本身可以是邏輯表達式(表達式的最終結果為True或False),也可以是算術表達式(表達式的最終返回值為0或非0)。
在邏輯運算中,數值0與邏輯值False相同,表示邏輯假;非0數值與True相同,表示邏輯真。邏輯運算符及其含義與示例如表所示。
例子名稱結果
$aand$bAnd(邏輯與)TRUE,如果$a與$b都為TRUE。
$aor$bOr(邏輯或)TRUE,如果$a或$b任一為TRUE。
$axor$bXor(邏輯異或)TRUE,如果$a或$b同位相異。
Not(1>2)Not(邏輯非)TRUE。
(1>2)Eqv(1>2)兩個操作數同為假,返回False;兩個操作數同為真,返回True;兩個操作數一真一假,返回FalseTRUE。
2<>1Imp3<5運算符左右同為真,返回True;左右同為假,返回True;左真右假,回返False;左假右真,返回TrueTRUE。

if語句

1if條件1then語句1elseif條件2then語句2elseif......else語句nendif

SelectCase語句

1SelectCase表達式Case表達式列表1語句1Case表達式列表2語句2...Case表達式列表n語句nEndSelect
其中的表達式列表可以為:
● 表達式例:"A"
● 用逗號分隔的一組枚舉表達式例:2,4,6,8
● 表達式1To表達式2例:60To100
● Is關係運算符表達式例:Is<60

Do...Loop語句

1DoWhile或Until條件語句塊1ExitDo語句塊2Loop

For...Next語句

1Do語句塊1ExitDo語句塊2LoopWhile或Until條件

ForEach…Next語句

1For循環控制變數=初值To終值Step步長語句塊‘ExitFor語句可以跳出循環體Next

跳出本次循環的continue語句

1For循環控制變數=初值To終值Step步長Do'用於模擬continue語句塊If條件ThenExitDo'用於模擬continue語句塊LoopWhileFalse'用於模擬continueNext

With語句

1With對象引用語句塊EndWith

OnError語句

1OnErrorGoto出錯處理語句的label'跳轉到出錯處理語句
1OnErrorResumeNext'遇到錯誤,不管錯誤,繼續往下執行

具有控制作用的函數

● If(條件式,表達式1,表達式2)
● Switch(條件式1,表達式1,[條件式2,表達式2[,...,條件式n,表達式n]])
● Choose(索引式,選項1[,選項2,...[,選項n]])'這是基於1的索引

註釋語句

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

語句的連寫與續行

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

過程與函數

1
2
Sub過程名(參數表)語句塊ExitSub語句塊EndSub
1Function函數名(參數表)AsType語句塊函數名=表達式ExitFunctionEndFunction
可以是Private、Public、Friend、Static等修飾。
調用函數/過程時,可以加括弧或者不加括弧。如果調用表達式作為一行的一部分,那麼必須用參數,例如函數調用的返回值賦給變數。調用過程時,可以使用/不使用call關鍵字。使用call語句調用過程,如果無參數,則不加括弧;如果有參數,必須加括弧。如果調用時用括弧包住單個參數,則該參數強行按值傳遞。需要特別注意,不用call不加括弧的調用,形參與實參是傳值(passedbyvalue)而不是傳引用(passedbyreference),這會導致一些對象的方法調用失敗。

常用內置函數

VBA的常用內置函數:
● MsgBox
● InputBox
● 舍入函數:Fix向0取整,Int向下取整,Round四捨五入
● Rnd:返回0-1內的單精度隨機數
● 字元串函數:
● ● Filter:對字元串的一維數組的過濾
● ● InStr([Start,],[,Compare])與InStrRev:查找子串
● ● Len:字元串長度
● ● Join:連接一維數組中的所有子字元串
● ● Left,Right,Mid:截取子字元串
● ● Space(數值):生成空格字元串
● ● Ucase,Lcase:大小寫轉換函數
● ● Ltrim,Rtrim,Trim:刪除首尾空格
● ● Replace
● ● Split:分割一個字元串成為一維數組
● ● StrComp:字元串比較
● ● StrConv:字元串轉換
● ● String(number,character):制定字元重複若干次
● ● StrReverse
● 日期/時間有關函數:
● ● Year,Month,Day,WeekDay,Hour,Minute,Second:截取日期時間分量
● ● DateAdd:日期/時間增量函數
● ● DateDiff(<間隔類型>,<日期1>,<日期2>[,W1][,W2])日期/時間的距離函數
● ● DatePart(<分割類型>,<日期>[,w1][,w2])時間分割函數
● ● DateSerial(<表達式1>,<表達式2>,<表達式3>)合成日期;DateValue(“字元串表達式”)返回日期;
● ● Date,Time,Now,Timer:返回日期時間
● ● DateValue
● ● TimeSerial:由時間序列得到時間對象
● ● TimeValue:由時間字元串得到時間對象
● ● Weekday:獲得日期的周幾
● ● WeekdayName
● 轉換函數:CBool、CByte、CCur、CDate、CDbl、CDec、CInt、CLng、CLngLng、CLngPtr、CSng、CStr、CVar、CVErr、Asc(<字元串表達式>)返回第一個字元的Ascii編碼值、Chr(ASCII碼)返回字元、Hex、Oct、Str(<數值表達式>)返回字元串、Val(string)、Format、FormatCurrency、FormatDateTime、FormatNumber、FormatPercent、MonthName。
● Nz(表達式或欄位屬性值[,規定值])如果是空,則返回0或者""或者函數的第二個參數值
● 驗證函數:isNumeric、isDate、isNull、isEmpty、IsArray、IsError、IsMissing、IsObject
● 數學函數:Abs、Sqr、Tan、Atn(即atan)、Sin、Cos、Exp(e為基的指數)、Log自然對數
● Array:構造一個Array對象
● CallByName:getorsetaproperty,orinvokeamethodatruntimeusingastringname.
● 控制流:Choose:類似於C語言的select語句、If相當於IF-ELSE語句、Switch
● Command:獲取命令行參數
● CreateObject:創建ActiveX對象
● CurDir:返回指定驅動器的當前工作路徑
● 由基本數學函數導出的函數:Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN
● DoEvents:暫時把CPU控制權交回給系統
● Environ:返迴環境變數的值
● 文件操作:
● ● Dir:返回滿足條件的所有文件、目錄的名字
● ● EOF
● ● FileAttr
● ● FileDateTime
● ● FileLen
● ● FreeFileFunction
● ● GetAttr:返迴文件、目錄的屬性值
● ● Input:讀取文件
● ● Loc:文件指針位置
● ● LOF:文件打開時的指針位置
● ● Seek:文件指針定位
● ● Spc:使用Print做positionoutput
● ● Tab:用於Print函數
● Error:錯誤號對應的錯誤消息
● WindowsRegistry中的數據:GetAllSettings、SaveSetting、DeleteSetting、GetSetting
● GetObject:ActiveX組建的引用
● IMEStatus:返回當前InputMethodEditor(IME)
● Macintosh平台:MacID、MacScript
● 金融函數:
● ● DDB:使用double-decliningbalance計算貶值
● ● FV:計算固定利率的年金
● ● IPmt:計算利率
● ● IRR:計算利率
● ● MIRR:計算利率
● ● NPer:計算周期數
● ● NPV:計算netpresentvalue
● ● Pmt:計算支付數
● ● PPmt:計算本金支付數
● ● PV:計算presentvalue
● ● Rate:利息率
● ● SLN:straight-linedepreciation
● ● SYD:計算sum-of-years'digitsdepreciation
● Partition:返回字元串,表示一個數值名字落在各個range內。常用於SQLselect語句
● QBColor:顏色值
● RGB:顏色值
● TypeName:得到變數的類型名
● VarType:得到變數的類型數