重慶旅游網(wǎng)站制作公司百度搜索風(fēng)云榜手機(jī)版
這篇文章是VBA系列專(zhuān)題的第一篇,干貨滿(mǎn)滿(mǎn),花費(fèi)1周整理完畢,全文6160字,深度閱讀時(shí)間大約25分鐘,本文全面又深入淺出地講解了VBA的基礎(chǔ)知識(shí),建議先點(diǎn)贊收藏再閱讀。
本文按照如下的結(jié)構(gòu)進(jìn)行講解。
1. 基本概念1.1 為什么要學(xué)習(xí)VBA1.2 VBA究竟是什么
2. 數(shù)據(jù)類(lèi)型2.1 數(shù)值型數(shù)據(jù)2.2 字符串型數(shù)據(jù)2.3 其它數(shù)據(jù)類(lèi)型
3. 常量和變量3.1 常量3.2 變量
4. 運(yùn)算符4.1 算術(shù)運(yùn)算符4.2 賦值運(yùn)算符4.3 比較運(yùn)算符4.4 連接運(yùn)算符4.5 邏輯運(yùn)算符
5. 程序結(jié)構(gòu)5.1 順序語(yǔ)句5.2 分支語(yǔ)句5.3 循環(huán)語(yǔ)句
1. 基本概念
1.1 為什么要學(xué)習(xí)VBA
自動(dòng)化操作。我們?cè)谑褂肊xcel的過(guò)程中,經(jīng)常會(huì)有這樣的情況,會(huì)按照相同的方法完成信息錄入,表格格式調(diào)整,信息處理,表格保存等簡(jiǎn)單、重復(fù)操作。我們可以使用VBA將這些操作轉(zhuǎn)換為VBA程序代碼,使工作自動(dòng)化。
成果復(fù)用。Office中的應(yīng)用程序可以共享VBA語(yǔ)言,如果你掌握了Word中使用VBA的方法,那么在Excel、PPT中使用Excel將變得非常容易,可以減少大量不必要的重復(fù)性工作,提高工作效率。
易于掌握。VBA的語(yǔ)法簡(jiǎn)單,學(xué)習(xí)門(mén)檻低。對(duì)于沒(méi)有編程基礎(chǔ)的小伙伴,依然可以錄制宏來(lái)記錄用戶(hù)的各種操作,Office將自動(dòng)將宏轉(zhuǎn)換為VBA代碼,非常容易掌握。(還不知道如何錄制宏的小伙伴,請(qǐng)點(diǎn)擊下方鏈接)
功能強(qiáng)大。VBA可以調(diào)用Excel自帶函數(shù)(數(shù)學(xué)與三角函數(shù)、日期與時(shí)間函數(shù)、查找與引用函數(shù)、邏輯函數(shù)、統(tǒng)計(jì)函數(shù)、文本函數(shù)、數(shù)據(jù)庫(kù)函數(shù)),還可以自定義函數(shù)。VBA可以處理多種類(lèi)型的數(shù)據(jù),數(shù)值型、邏輯型等等。VBA支持處理工作簿、工作表、單元格等。
1.2 VBA究竟是什么
在介紹VBA之前,首先介紹VB。VB(Visual Basic)是Basic的第四代語(yǔ)言,是一種可視化、面向?qū)ο蟮慕Y(jié)構(gòu)化高級(jí)程序語(yǔ)言。
VBA與VB是什么關(guān)系呢?
VBA是VB的一個(gè)子集,VBA是VB與Office的結(jié)合。
VBA是新一代標(biāo)準(zhǔn)宏語(yǔ)言,VBA是Visual Basic for Applications的縮寫(xiě),是在Office中執(zhí)行通用的自動(dòng)化任務(wù)的編程語(yǔ)言。VBA可以用于Word、Excel、PPT。
VBA與VB有什么區(qū)別呢?
- VBA的開(kāi)發(fā)依賴(lài)于Office環(huán)境,VB具有自己的開(kāi)發(fā)環(huán)境。
- VBA用于Office的自動(dòng)化操作,VB是設(shè)計(jì)標(biāo)準(zhǔn)的Windows應(yīng)用程序。
- VBA開(kāi)發(fā)的程序依賴(lài)于它的父程序(Office),運(yùn)行VB生成的應(yīng)用程序是標(biāo)準(zhǔn)的可執(zhí)行程序(*.exe),運(yùn)行時(shí)不依賴(lài)開(kāi)發(fā)環(huán)境。
2. 數(shù)據(jù)類(lèi)型
我們?cè)谑褂肰BA程序時(shí),首先需要學(xué)習(xí)VBA的數(shù)據(jù)類(lèi)型。根據(jù)數(shù)據(jù)的用途、類(lèi)型的不同,VBA的數(shù)據(jù)類(lèi)型可以劃分為三大類(lèi):
2.1 數(shù)值型數(shù)據(jù)
字節(jié)型數(shù)據(jù)(Byte):存儲(chǔ)為1字節(jié),數(shù)值范圍是0到255,用于存放少量的整數(shù)值。
整數(shù)型數(shù)據(jù)(Integer):存儲(chǔ)為2字節(jié),數(shù)值范圍是-32768到32767,用于表示整數(shù),是經(jīng)常被使用的數(shù)據(jù)類(lèi)型。
長(zhǎng)整型數(shù)據(jù)(Long):存儲(chǔ)為4字節(jié),數(shù)值范圍是-2147483648到2147483647,用于表示大型數(shù)據(jù)。
單精度浮點(diǎn)型數(shù)據(jù)(Single):存儲(chǔ)為4字節(jié),表示單精度浮點(diǎn)值,表示的負(fù)數(shù)范圍是 -3.4 E38 ~ -1.4E-45,正數(shù)范圍是: 1.4E-45~ 3.4E38
雙精度浮點(diǎn)型數(shù)據(jù)(Double):存儲(chǔ)為8字節(jié),表示雙精度浮點(diǎn)值,表示的負(fù)數(shù)范圍是-1.7E308 到-4.9E-324,正數(shù)范圍是4.9E-324到1.7E308。
2.2 字符串型數(shù)據(jù)
固定長(zhǎng)度字符串:長(zhǎng)度范圍是1~64000個(gè)字符,長(zhǎng)度是固定的。
可變長(zhǎng)度字符串:長(zhǎng)度范圍是0~20億個(gè)字符,長(zhǎng)度是不固定的。
2.3 其它數(shù)據(jù)類(lèi)型
日期型數(shù)據(jù)(Date):8個(gè)字節(jié),表示范圍:100年1月1日 - 9999年12月31日
貨幣型數(shù)據(jù)(Currency):8個(gè)字節(jié)
布爾型數(shù)據(jù)(Boolean):2個(gè)表示,表示范圍:True和False
據(jù)說(shuō)聰明的人在學(xué)習(xí)知識(shí)時(shí),最喜歡做的事情就是雙擊屏幕。
3. 常量和變量
常量和變量是VBA中非常重要的兩個(gè)概念,在程序執(zhí)行過(guò)程中,不會(huì)發(fā)生改變的數(shù)據(jù)被稱(chēng)為常量,用于存儲(chǔ)固定信息。會(huì)發(fā)生改變的數(shù)據(jù)被稱(chēng)為變量,用于存儲(chǔ)臨時(shí)保存的值。
3.1 常量
在編寫(xiě)程序的過(guò)程中,有些數(shù)據(jù)值不會(huì)改變,并且會(huì)在多個(gè)地方被引用,我們可以將他們定義為常量。
我們分兩個(gè)步驟來(lái)講解:第一步是聲明,第二步是使用。
按照如下的語(yǔ)法格式進(jìn)行聲明
Const <符號(hào)常量> = <常量值>
下面的示例中,第1行代碼就是聲明1個(gè)常量,第5行代碼就是如何使用這個(gè)常量。
Const Rate=0.52
Dim Result As Double
Dim Original As Double
Original=100
Result = Original * Rate
3.2 變量
在程序執(zhí)行過(guò)程中,某些數(shù)值會(huì)發(fā)生變化,這些臨時(shí)數(shù)值被稱(chēng)為變量。變量包含名稱(chēng)和數(shù)據(jù)類(lèi)型兩部分,通過(guò)變量名稱(chēng)就可以引用變量。
在使用變量之前,我們需要聲明變量。
Dim 變量名 [As 數(shù)據(jù)類(lèi)型]
在上面的聲明語(yǔ)句中,Dim和As被稱(chēng)為聲明變量的關(guān)鍵字。這里的變量名命名方式盡量與實(shí)際功能相符合,方便記憶。這里的數(shù)據(jù)類(lèi)型請(qǐng)參考本文第2章。
這里舉兩個(gè)例子,第1句聲明一個(gè)數(shù)據(jù)類(lèi)型是整型的變量,變量名是Length,第2句聲明一個(gè)數(shù)據(jù)類(lèi)型是字符串的變量,變量名是SName。
Dim Length As Integer
Dim SName As String
4. 運(yùn)算符
VBA程序是由一個(gè)個(gè)表達(dá)式組成的,而表達(dá)式是由操作數(shù)和運(yùn)算符組成,這里的操作數(shù)可以是我們第3章介紹過(guò)的變量,也可以是常量。而運(yùn)算符包括算術(shù)運(yùn)算符、賦值運(yùn)算符、比較運(yùn)算符、連接運(yùn)算符和邏輯運(yùn)算符。
本章將對(duì)這些運(yùn)算符逐個(gè)進(jìn)行講解。
4.1 算術(shù)運(yùn)算符
算術(shù)運(yùn)算符包括7種:加法、減法、乘法、除法、整除、指數(shù)、求余。

4.2 賦值運(yùn)算符
賦值運(yùn)算符就是等號(hào),賦值運(yùn)算符可以給變量賦值,也可以給對(duì)象的屬性賦值。例如:
Dim SName As String
SName = "Company"
4.3 比較運(yùn)算符
比較運(yùn)算符通常用于比較兩個(gè)數(shù)值的大小,比較兩個(gè)表達(dá)式的大小,比較運(yùn)算符的輸出結(jié)果是布爾型數(shù)據(jù)。布爾型數(shù)據(jù)包括True或False,如果比較結(jié)果是真,則為T(mén)rue,如果比較結(jié)果為假,則為False。

4.4 連接運(yùn)算符
連接運(yùn)算符包括兩種:&和+。連接運(yùn)算符屬于二元運(yùn)算符,即運(yùn)算符包括兩個(gè)變量。
連接符&:不管什么類(lèi)型的數(shù)據(jù),&都將左右的變量當(dāng)成是字符串,并將這兩個(gè)字符串進(jìn)行連接。
連接符+:當(dāng)參與連接運(yùn)算的兩個(gè)變量是字符串時(shí),+號(hào)才完成字符串連接的作用,否則被當(dāng)成加法運(yùn)算符。
舉例說(shuō)明:
SName="Today"&"_Duty",輸出結(jié)果:SName=Today_Duty
SSequence="300"+"_180",輸出結(jié)果:SSequence=300_180
4.5 邏輯運(yùn)算符
邏輯運(yùn)算符用于執(zhí)行表達(dá)式之間的邏輯操作,結(jié)果是布爾型數(shù)據(jù)。常用的邏輯運(yùn)算符包括“邏輯與”、“邏輯或”,“邏輯非”,“邏輯異或”。

當(dāng)您看到這里的時(shí)候,說(shuō)明您距離掌握VBA基礎(chǔ)知識(shí)只差最后一步了,那就是雙擊屏幕。
5. 程序結(jié)構(gòu)
學(xué)過(guò)C語(yǔ)言的同學(xué)們都知道,在C語(yǔ)言中,具備三種類(lèi)型的程序結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。在VBA中也是一樣,使用這三種程序結(jié)構(gòu)就可以實(shí)現(xiàn)我們的算法處理流程
5.1 順序語(yǔ)句
順序結(jié)構(gòu)是最基本的語(yǔ)句,順序結(jié)構(gòu)就是按照程序中的語(yǔ)句順序逐條依次執(zhí)行,順序結(jié)構(gòu)包括兩種語(yǔ)句:賦值語(yǔ)句和聲明語(yǔ)句。
賦值語(yǔ)句和聲明語(yǔ)句,我們已經(jīng)在前面詳細(xì)介紹了,這里不再贅述。
5.2 分支語(yǔ)句
在實(shí)際程序執(zhí)行的過(guò)程中,語(yǔ)句的執(zhí)行順序可能根據(jù)某些條件語(yǔ)句來(lái)判斷。常見(jiàn)的條件語(yǔ)句包括單分支IF語(yǔ)句結(jié)構(gòu)、雙分支IF語(yǔ)句結(jié)構(gòu)、多分支IF語(yǔ)句結(jié)構(gòu)、Case語(yǔ)句結(jié)構(gòu)。
單分支IF語(yǔ)句結(jié)構(gòu)
在單分支IF語(yǔ)句結(jié)構(gòu)中,當(dāng)IF表達(dá)式執(zhí)行結(jié)果為T(mén)rue時(shí),執(zhí)行后面的語(yǔ)句組,當(dāng)表達(dá)式執(zhí)行結(jié)果為False時(shí),則直接跳過(guò)后面的語(yǔ)句組,語(yǔ)句執(zhí)行流程如下圖所示。

在程序中,我們使用下面的語(yǔ)法格式。
IF <條件表達(dá)式> Then
<語(yǔ)句組1>
End IF
雙分支IF語(yǔ)句結(jié)構(gòu)
我們?cè)趯?shí)際應(yīng)用場(chǎng)景中,可能會(huì)遇到這樣的情況,當(dāng)不滿(mǎn)足條件時(shí),我們也需要執(zhí)行某些語(yǔ)句組。當(dāng)滿(mǎn)足條件表達(dá)式時(shí),執(zhí)行語(yǔ)句組1,當(dāng)不滿(mǎn)足條件表達(dá)式時(shí),執(zhí)行語(yǔ)句組2。

在程序中,我們使用下面的語(yǔ)法結(jié)構(gòu)
IF <條件表達(dá)式> Then
<語(yǔ)句組1>
Else
<語(yǔ)句組2>
End IF
多分支IF語(yǔ)句結(jié)構(gòu)
有時(shí)候我們的邏輯決策不是一條,而是多條,我們?cè)诔绦驁?zhí)行過(guò)程中,需要完成邏輯決策樹(shù)的梳理。
實(shí)際的邏輯決策樹(shù)執(zhí)行流程是這樣的:
1)當(dāng)滿(mǎn)足條件表達(dá)式1時(shí),執(zhí)行語(yǔ)句組1,當(dāng)不滿(mǎn)足條件表達(dá)式1時(shí),跳轉(zhuǎn)到第2)句;
2)當(dāng)滿(mǎn)足條件表達(dá)式2時(shí),執(zhí)行語(yǔ)句組2,當(dāng)不滿(mǎn)足條件表達(dá)式2時(shí),跳轉(zhuǎn)到第3)句;
3)...
4)當(dāng)滿(mǎn)足條件表達(dá)式N時(shí),執(zhí)行語(yǔ)句組N,當(dāng)不滿(mǎn)足條件表達(dá)式N時(shí),執(zhí)行語(yǔ)句組N+1。

在程序中,我們使用下面的語(yǔ)法結(jié)構(gòu):
IF <條件表達(dá)式1> Then
<語(yǔ)句組1>
Else IF <條件表達(dá)式1> Then
<語(yǔ)句組1>
...
...
Else IF <條件表達(dá)式N> Then
<語(yǔ)句組N>
Else
<語(yǔ)句組N+1>
Else
Case語(yǔ)句結(jié)構(gòu)
我們剛剛學(xué)習(xí)了使用IF語(yǔ)句實(shí)現(xiàn)多分支IF語(yǔ)句結(jié)構(gòu),學(xué)過(guò)C語(yǔ)言的同學(xué)都知道,使用Case語(yǔ)句也可以完成多分支語(yǔ)句結(jié)構(gòu)。
實(shí)際的邏輯決策樹(shù)執(zhí)行流程是這樣的:
1)當(dāng)滿(mǎn)足條件表達(dá)式1時(shí),執(zhí)行語(yǔ)句組1,當(dāng)不滿(mǎn)足條件表達(dá)式1時(shí),跳轉(zhuǎn)到第2)句;
2)當(dāng)滿(mǎn)足條件表達(dá)式2時(shí),執(zhí)行語(yǔ)句組2,當(dāng)不滿(mǎn)足條件表達(dá)式2時(shí),跳轉(zhuǎn)到第3)句;
3)...
4)當(dāng)滿(mǎn)足條件表達(dá)式N時(shí),執(zhí)行語(yǔ)句組N,當(dāng)不滿(mǎn)足條件表達(dá)式N時(shí),執(zhí)行語(yǔ)句組N+1。

在程序中,我們使用下面的語(yǔ)法結(jié)構(gòu):
Select Case 測(cè)試表達(dá)式
Case <條件表達(dá)式1><語(yǔ)句組1>
Case <條件表達(dá)式2><語(yǔ)句組2>
...
...
Case <條件表達(dá)式N><語(yǔ)句組N>
Case Else<語(yǔ)句組N+1>
End Select
5.3 循環(huán)語(yǔ)句
我們?cè)趯?shí)際的VBA應(yīng)用程序中,可能會(huì)遇到反復(fù)多次處理的問(wèn)題,我們可以將這些反復(fù)處理的語(yǔ)句提取出來(lái),再用循環(huán)語(yǔ)句進(jìn)行嵌套。
循環(huán)語(yǔ)句總共包括三類(lèi):For-Next語(yǔ)句、Do-Loop語(yǔ)句、While-Wend語(yǔ)句。其中For-Next語(yǔ)句用于循環(huán)次數(shù)已知的情況,Do-Loop語(yǔ)句和While-Wend用于循環(huán)循環(huán)次數(shù)未知的情況。
For-Next語(yǔ)句
在VBA中,For-Next語(yǔ)句的實(shí)際執(zhí)行情況是這樣的:
1)用初值給循環(huán)變量賦值;
2)判斷循環(huán)變量是否超過(guò)終值,如果循環(huán)變量超過(guò)終值,則退出For循環(huán),如果循環(huán)變量未超過(guò)終值,則執(zhí)行第3)步;
3)執(zhí)行循環(huán)體,循環(huán)變量=循環(huán)變量+步長(zhǎng)。
用流程圖進(jìn)行描述如下:
在程序正常執(zhí)行的情況下,For-Next循環(huán)次數(shù)是確定的,循環(huán)次數(shù)= 終值-初值)/步長(zhǎng)+1。
我們?cè)诔绦蛑?#xff0c;是這樣進(jìn)行調(diào)用的:
For <循環(huán)變量> = <初值> To <終值> ( Step < 步長(zhǎng)>)<語(yǔ)句組1>
Next <循環(huán)變量>
Do-Loop語(yǔ)句
Do-Loop語(yǔ)句應(yīng)用于循環(huán)次數(shù)未知的情況,主要包括4種循環(huán)語(yǔ)句:Do-While-Loop循環(huán)語(yǔ)句、Do-Until-Loop循環(huán)語(yǔ)句、Do-Loop-While循環(huán)語(yǔ)句、Do-Loop-Until循環(huán)語(yǔ)句。
(1)Do-While-Loop循環(huán)語(yǔ)句
程序?qū)嶋H執(zhí)行流程是這樣的:
1)先判斷循環(huán)條件是否成立;
2)如果成立,則執(zhí)行語(yǔ)句組1;
3)如果不成立,則跳出循環(huán)。
在調(diào)用程序語(yǔ)句時(shí),結(jié)構(gòu)是這樣的:
Do While <循環(huán)條件>[循環(huán)語(yǔ)句]
Loop
(2)Do-Until-Loop循環(huán)語(yǔ)句
程序?qū)嶋H執(zhí)行流程是這樣的:
1)先判斷循環(huán)條件是否成立;
2)如果不成立,則執(zhí)行語(yǔ)句組1;
3)如果成立,則跳出循環(huán)。
Do Until <循環(huán)條件>[循環(huán)語(yǔ)句]
Loop
(3)Do-Loop-While循環(huán)語(yǔ)句
程序?qū)嶋H執(zhí)行流程是這樣的:
1)先執(zhí)行循環(huán)體;
2)判斷循環(huán)條件是否成立;
3)如果成立,則繼續(xù)執(zhí)行;
4)如果不成立,則跳出循環(huán)。
Do [循環(huán)語(yǔ)句]
Loop While<循環(huán)條件>
(4)Do-Loop-Until循環(huán)語(yǔ)句
程序?qū)嶋H執(zhí)行流程是這樣的:
1)先執(zhí)行循環(huán)體;
2)判斷循環(huán)條件是否成立;
3)如果不成立,則繼續(xù)執(zhí)行;
4)如果成立,則跳出循環(huán)。
Do [循環(huán)語(yǔ)句]
Loop Until<循環(huán)條件>
While-Wend語(yǔ)句
While-Wend語(yǔ)句同樣適用于循環(huán)次數(shù)未知的情況。
程序?qū)嶋H執(zhí)行流程是這樣的:
1)先判斷循環(huán)條件是否成立;
2)如果成立,則執(zhí)行語(yǔ)句組1;
3)如果不成立,則跳出循環(huán)。
在調(diào)用程序語(yǔ)句時(shí),結(jié)構(gòu)是這樣的:
While <循環(huán)條件>[循環(huán)語(yǔ)句]
Loop