-
VBA
(Visual Basic宏語言)
鎖定
VBA(Visual Basic for Applications)是Visual Basic的一種宏語言,是在其桌面應用程序中執行通用的自動化(OLE)任務的編程語言。主要能用來擴展Windows的應用程序功能,特別是Microsoft Office軟件。它也可説是一種應用程式視覺化的 Basic 腳本。
- 中文名
- Visual Basic宏語言
- 外文名
- Visual Basic for Applications
- 釋 義
- Visual Basic的一種宏語言
- 功 能
- 擴展Windows的應用程式功能
- 發行時間
- 1993年
- 語言屬性
- 應用程序一種通用的自動化語言
- 簡 稱
- VBA
- 具備功能時間
- 1994
- 操作系統
- Microsoft Visual,Mac OSX
- 啓發語言
- Visual Basic,QuickBASIC
目錄
- 6 語法結構
- ▪ if 語句
- ▪ Select Case 語句
- ▪ Do...Loop 語句
- ▪ For...Next語句
- ▪ For Each … Next語句
- ▪ 跳出本次循環的continue語句
- ▪ With語句
- ▪ On Error語句
VBA相關信息
Visual Basic for Applications(簡稱VBA)是新一代標準宏語言,是基於Visual Basic for Windows 發展而來的。它與傳統的宏語言不同,傳統的宏語言不具有高級語言的特徵,沒有面向對象的程序設計概念和方法。而VBA 提供了面向對象的程序設計方法,提供了相當完整的程序設計語言。VBA 易於學習掌握,可以使用宏記錄器記錄用户的各種操作並將其轉換為VBA 程序代碼。這樣用户可以容易地將日常工作轉換為VBA 程序代碼,使工作自動化。
[1]
VBA是基於 Visual basic發展而來的,與VB具有相似的語言結構。從語言結構上講,VBA是VB的一個子集,它們的語法結構是一樣的。兩者的開發環境也幾乎相同。但是,VB是獨立的開發工具,它不需要依附於任何其他應用程序,它有自己完全獨立的工作環境和編譯、鏈接系統。VBA卻沒有自己獨立的工作環境,它必須依附於某一個主應用程序,VBA專門用於Office的各應用程序中,如Word、 Excel、 Access等。在 Access中,可以通過VBA編寫模塊來滿足特定的需要。
[1]
Office取得巨大成功的一個重要原因就是VBA,使用VBA可以完成很多事情,基於Excel、Word的VBA小程序不計其數。Office中的應用程序可以共享VBA語言,如果掌握了在 Excel 2016中使用VBA的方法,那麼在Word、Power Point中使用VBA自然會變得易如反掌。掌握對VBA語言的使用,可以讓複雜的工作簡易化,減少不必要的重複性工作,大大提高我們的工作效率。
[3]
VBA程序員很多是業餘程序員,正因為業餘,解決的卻是工作中需要解決的問題;所以,VBA程序大多都是隻是在部門內部或個人使用的小工具。集成了VBA的其他應用程序也很多,但真正能為程序增色的不多。
[1]
大多數人看到了VBA可以自動化一個程序,可以擴展已有程序,但沒有看到在Office中,VBA代碼可以是錄製的,而不是寫出來的,帶來的好處是,學習曲線變得非常緩。如果沒有宏錄製功能,要熟悉某個Office組件的對象模型,絕非一日之功。
[1]
以ArcGIS為例,ArcGIS擴展必須使用ArcObject,不管是使用VBA也罷,VB也罷,還是C++也罷。但同時,ArcObject的學習不是一天兩天可以搞定,對於業餘程序員,要使用VBA來擴展ArcGIS,幾乎沒有可能;專業程序員又不屑使用VBA;而對於公司,如果要基於ArcObject來擴展ArcGIS,選擇VBA意味着源碼的保護很困難。所以,ArcGIS的VBA就如同雞肋。
[1]
VBAVB 與VBA
VBA 是基於Visual Basic 發展而來的,它們具有相似的語言結構。Visual Basic 是Microsoft 的主要圖形界面開發工具,VBA 5.0 (亦即VBA 97)則是Visual Basic 5.0 的子集。Visual Basic 是由Basic 發展而來的第四代語言。Visual Basic 作為一套獨立的 Windows 系統開發工具,可用於開發Windows 環境下的各類應用程序,是一種可視化的、面向對象的、採用事件驅動方式的結構化高級程序設計語言。它具有高效率、簡單易學及功能強大的特點。VB 的程序語言簡單、便捷,利用其事件驅動的編程機制,新穎易用的可視化設計工具,並使用Windows應用程序接口(API)函數,採用動態鏈接庫(DLL)、動態數據交換(DDE)、對象的鏈接與嵌入(OLE)以及開放式數據庫訪問(ODBC)等技術,可以高效、快速地編制出 Windows 環境下功能強大、圖形界面豐富的應用軟件系統。
[1]
Visual Basic 程序很大一部分以可視(Visual)形式實現,這意味着在設計階段就可以看到程序運行的屏幕畫面,用户可以在設計時能夠方便地改動畫面圖像、大小、顏色等,直到滿意為止。VB 的用户可以是缺乏Windows 及C 語言開發經驗的專業軟件人員,也可以是具有一定Windows開發經驗的專業人員,VB 的可視化編程方法使得原來繁瑣枯燥、令人生畏的Windows 應用程序設計變得輕鬆自如、妙趣橫生。以往的Windows 應用程序開發工具在設計圖形用户界面時,都是採用編程的方法,並伴隨大量的計算任務,一個大型應用程序約有90%的程序代碼用來處理用户界面,而且在程序設計過程中不能看到界面顯示的效果,只有在程序執行時才能觀察到,如果界面效果不佳,還需要回到程序中去修改。Visual Basic 提供了新穎的可視化設計工具,巧妙地將Windows界面設計的複雜性封裝起來,程序開發人員不必再為界面設計而編寫大量程序代碼,僅需採用現有工具按設計者要求的佈局,在屏幕上畫出所需界面,併為各圖形對象設置屬性即可,VB 自動產生界面設計代碼,這樣便將事先編制好的控件可視地連接到一起,構成一個隨時可調整的界面。
[1]
VBA 不但繼承了VB 的開發機制,而且VBA 還具有與VB 相似的語言結構,它們的集成開發環境IDE(Intergrated Development Environment)也幾乎相同。但是,經過優化,VBA 專門用於Office 的各應用程序。VB 可運行直接來自Windows 95 或NT 桌面上的應用程序,而VBA 的項目(Project)僅由使用VBA 的Excel、Word、 PowerPoint 等稱為宿主(Host)的Office 應用程序(Application)來調用。
[1]
VBA區別
儘管存在這些不同,VBA和VB在結構上仍然十分相似。事實上,如果你已經瞭解了VB,會發現學習VBA非常快。相應的,學完VBA會給學習VB打下堅實的基礎。而且,當學會在EXCEL中用VBA創建解決方案後,即已具備在WORD ACCESS OUTLOOK FOXPRO POWERPOINT 中用VBA創建解決方案的大部分知識。
[3]
VBA數據類型
VBA基本數據類型
VBA自定義的數據類型
Type 自定義類型名 元素名 As 類型 … [元素名 As 類型] End Type
VBA數組
- Option Base 1 :數組索引值從1開始
- MyArray(5) = 101 :給數組的元素賦值
- Dim Data(10,5) :聲明一個二維數組變量
- Data(1,1) = "A001" :給數組元素賦值
- Dim cArr(-11 To 20, 1 To 3) As String :聲明一個數組,定義數組索引值的上下界
- Dim dArr() As String :聲明動態數組
- ReDim dArr(0 To 5, 1 To 2) :改變動態數組的尺寸默認把原數據清除。如果保留原來的數據,必須加上參數
- Preserve:使用Preserve參數時只能改變最後一位的大小
- If UBound(vTemp) = -1 Then:判斷數組變量vTemp是否為空數組
VBA常量
VBA系統定義常量
VBA固有常量
固有常量是編程時引用的對象庫定義的常量。所有固有常量都可以在宏或VBA代碼中使用。通常,固有常量通過前兩個字母來指明定義該常量。來自VB庫的常量則以“vb”開頭。來自Access的常量以“ac”開頭。可以使用對象瀏覽器來查看所有對象庫中的固有常量列表。
[4]
在VBA中,常量的數據類型有整型、長整型、單精度型、雙精度型、字節型、貨幣型、字符型、日期型和邏輯型。一個整型數據就是一個整型常量,一個長整型數據就是一個長整型常量。例如,12%、-1%是整型常量,32768&、10000000&是長整型常量,-2.5 1、3.14是單精度實型常量,3.1415926#是雙精度實型常量,China、Shanghai是字符型常量,#07/13/2001 11:45PM#是日期常量,由符號 “ # ” 將字符括起來。
[4]
VBA符號常量
基本語法格式:
[ Publicr/ Private] Const 常量名[As 類型]=表達式
語句功能:
説明:
VBA變量
VBA聲明
◆ 利用Private關鍵字聲明變量:Private關鍵字用於在類模塊中聲明一個私有變量,它只能在當前的類模塊中使用。當定義變量的位置同處於類模塊中時,其使用效果與使用Dim關鍵字定義的變量相同。
[5]
VBA賦值
- 變量名=數據
- 變量1=變量2 運算符 數據
- 變量1=變量2 運算符 變量3 … 運算符 變量n
如果在定義變量時指定了變量的數據類型,則為變量所賦的值也必須是該數據類型的值。如果變量定義為Integer類型,而在賦值時卻給了變量一個String類型的數據,則在編譯運行的過程中將彈出錯誤彈框。
[5]
VBA運算符
運算符是在程序中執行計算功能的某些特殊符號,它是程序代碼的重要組成部分。在程序代碼中,運算符不能單獨使用,必須與其操作數共同組成表達式後才具有運算意義。VBA中的運算符包含算術運算符、連接運算符、比較運算符和邏輯運算符等。
[4]
VBA算術運算符
例子 | 名稱 | 結果 |
---|---|---|
-$a | 取反 | $a 的負值。 |
$a + $b | 加法 | $a 和 $b 的和。 |
$a - $b | 減法 | $a 和 $b 的差。 |
$a * $b | 乘法 | $a 和 $b 的積。 |
$a / $b | 除法 | $a 除以 $b 的商,允許小數。 |
$a \ $b | 除法 | $a 除以 $b 的商,結果取整。 |
$a Mod $b | 取餘 | $a 除以 $b 的餘數 |
注意:
在執行算術運算時,運算符兩側操作的數據類型必須相同,否則會出現“類型不匹配”的錯誤提示。當“+”運算符左右兩側都是字符串類型的操作數時,執行的是連接運算,如表達式“"Pass+"word"的計算結果為字符串“ PassWord ”。
[5]
VBA連接運算符
連接運算符的作用是將運算符兩側的操作數連接成一個數,其操作數的數據類型通常都為String類型。VBA中的連接運算符有“&”和“+”兩種,由於使用“+”執行連接運算時,容易與加法運算混淆,所以通常都採用“&”進行連接運算。
[5]
VBA比較運算符
比較運算符可以對運算符兩側的操作數執行比較運算,其返回結果為Boolean類型的True或False。比較運算符的操作數通常為具體的數值,當操作數為字符串或其他符號時,是根據該符號的ASCII碼進行比較的。VBA中的比較運算符及其作用與示例如表所示。
[5]
例子 | 名稱 | 結果 |
---|---|---|
$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。 |
VBA邏輯運算符
例子 | 名稱 | 結果 |
---|---|---|
$a and $b | And(邏輯與) | TRUE,如果 $a 與 $b 都為TRUE。 |
$a or $b | Or(邏輯或) | TRUE,如果 $a 或 $b 任一為TRUE。 |
$a xor $b | Xor(邏輯異或) | TRUE,如果 $a 或 $b 同位相異。 |
Not(1>2) | Not(邏輯非) | TRUE。 |
(1>2) Eqv (1>2) | 兩個操作數同為假,返回False;兩個操作數同為真,返回True;兩個操作數一真一假,返回False | TRUE。 |
2<>1 Imp 3<5 | 運算符左右同為真,返回True;左右同為假,返回True;左真右假,回返 False;左假右真,返回True | TRUE。 |
VBA語法結構
VBAif 語句
if 條件1 then 語句1elseif 條件2 then 語句2elseif ... ...else 語句nend if
VBASelect Case 語句
Select Case 表達式 Case 表達式列表1 語句1 Case 表達式列表2 語句2 ... Case 表達式列表n 語句nEnd Select
VBADo...Loop 語句
Do While或Until 條件 語句塊1 Exit Do 語句塊2Loop
VBAFor...Next語句
Do 語句塊1 Exit Do 語句塊2Loop While或Until 條件
VBAFor Each … Next語句
For 循環控制變量=初值To 終值Step 步長 語句塊 ‘Exit For語句可以跳出循環體Next
VBA跳出本次循環的continue語句
For 循環控制變量=初值 To 終值 Step 步長 Do '用於模擬continue 語句塊 If 條件 Then Exit Do '用於模擬continue 語句塊 Loop While False '用於模擬continue Next
VBAWith語句
With 對象引用 語句塊End With
VBAOn Error語句
On Error Goto 出錯處理語句的label '跳轉到出錯處理語句
或
On Error Resume Next '遇到錯誤,不管錯誤,繼續往下執行
VBA具有控制作用的函數
VBA其他語句
VBA註釋語句
VBA語句的連寫與續行
VBA過程與函數
Sub 過程名(參數表) 語句塊 Exit Sub 語句塊End Sub
Function 函數名(參數表) As Type 語句塊 函數名=表達式 Exit FunctionEnd Function
調用函數/過程時,可以加括號或者不加括號。如果調用表達式作為一行的一部分,那麼必須用參數,例如函數調用的返回值賦給變量。 調用過程時, 可以使用/不使用call關鍵字。使用call語句調用過程,如果無參數,則不加括號;如果有參數,必須加括號。如果調用時用括號包住單個參數,則該參數強行按值傳遞。需要特別注意,不用call不加括號的調用,形參與實參是傳值(passed by value)而不是傳引用(passed by reference),這會導致一些對象的方法調用失敗。例如:
[6]
Dim cn As ADODB.Connection Set cn = CurrentProject.Connection Dim rs As New ADODB.Recordset rs.Open "SELECT * FROM myTable" , cn Dim ExcelApp As New Excel.Application Dim ExcelWst As Worksheet Set ExcelWst = ExcelApp.Workbooks.Add.Worksheets(1) ExcelWst.Range("A2").CopyFromRecordset(rs) '失敗,無法執行該行 ExcelWst.Range("A2").CopyFromRecordset rs '可成功執行該行
VBA常用內置函數
- 舍入函數:Fix 向0取整,Int向下取整, Round四捨五入
- Rnd: 返回0-1內的單精度隨機數
- Filter:對字符串的一維數組的過濾
- InStr([Start, ]<Str1>,<Str2>[, Compare])與InStrRev: 查找子串
- Len:字符串長度
- Join:連接一維數組中的所有子字符串
- Left,Right,Mid: 截取子字符串
- Space(數值) :生成空格字符串
- Ltrim, Rtrim,Trim :刪除首尾空格
- Split:分割一個字符串成為一維數組
- StrComp:字符串比較
- StrConv:字符串轉換
- String(number, character):制定字符重複若干次
- 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: 返回日期時間
- TimeSerial:由時間序列得到時間對象
- TimeValue:由時間字符串得到時間對象
- Weekday:獲得日期的周幾
- CreateObject:創建ActiveX對象
- 由基本數學函數導出的函數:Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN
- Dir:返回滿足條件的所有文件、目錄的名字
- FileDateTime
- FileLen
- FreeFile Function
- GetAttr:返回文件、目錄的屬性值
- Input:讀取文件
- Loc:文件指針位置
- LOF:文件打開時的指針位置
- Seek:文件指針定位
- Spc:使用Print做position output
- Tab:用於Print函數
- DDB:使用double-declining balance計算貶值
- FV:計算固定利率的年金
- IPmt:計算利率
- IRR:計算利率
- MIRR:計算利率
- NPer:計算週期數
- NPV:計算net present value
- Pmt:計算支付數
- PPmt:計算本金支付數
- PV:計算present value
- Rate:利息率
- SLN:straight-line depreciation
- SYD:計算sum-of-years' digits depreciation
VBA用途
由於微軟Office軟件的普及,人們常見的辦公軟件Office軟件中的Word、Excel、Access、Powerpoint都可以利用VBA使這些軟件的應用更高效率,例如:通過一段VBA代碼,可以實現畫面的切換;可以實現複雜邏輯的統計(比如從多個表中,自動生成按合同號來跟蹤生產量、入庫量、銷售量、庫存量的統計清單)等。
[5]
- 參考資料
-
- 1. 杜菁主編;武文芳,周震副主編.數據庫技術與應用新概念教程 (第2版)=SHUJUKU JISHU YU YINGYONG XINGAINIAN JIAOCHENG:中國鐵道出版社,2016.08:第242頁
- 2. 劉林,張瑞秋.AutoCAD 2016中文版高級應用教程 高級繪圖員考試指南 第5版:華南理工大學出版社,2016.02:第302頁
- 3. 一線文化.2天學會EXCEL表格與數據處理 2016版:中國鐵道出版社,2016.07:第232頁
- 4. 劉麗,高潤泉.ACCESS 2010數據庫基礎教程:北京理工大學出版社,2016.07:第206頁
- 5. 楊小麗.EXCEL應用大全 全新升級版:中國鐵道出版社,2016.01:第465頁
- 6. Perry G L W . SpPack: spatial point pattern analysis in Excel using Visual Basic for Applications (VBA)[J]. Environmental Modelling & Software, 2004, 19(6):559-569.