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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Excel-VBA基础语法

發(fā)布時(shí)間:2023/12/13 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 Excel-VBA基础语法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

VBA簡介、數(shù)據(jù)類型、變量、數(shù)組、運(yùn)算符、內(nèi)置函數(shù)、過程與函數(shù)

一、VBA介紹

1、宏和VBA的關(guān)系

  vba是編程語言,宏是用vba代碼保存下來的程序。錄制的宏是vba里最簡單的程序,正因?yàn)槿绱耍浿坪甏嬖谠S多缺陷:如無法進(jìn)行判斷和循環(huán),不能顯示用戶窗體,不能進(jìn)行人機(jī)交互……

  解決錄制宏的這些問題,需要掌握vbs編程的方法,自主的編寫vba程序。

2、VBA程序結(jié)構(gòu)

代碼:vba程序由代碼組成。
過程:例如Sub過程、Function過程
模塊:保存過程的地方,一個(gè)模塊可以保存多個(gè)不同類型的過程
對(duì)象:用代碼操作或控制的東西即為對(duì)象,例如工作簿、工作表、單元格、圖片、圖表、透視表等
對(duì)象的屬性:每個(gè)對(duì)象都有屬性,屬性是對(duì)象包含的內(nèi)容或特點(diǎn),例如A1單元格的內(nèi)容:A1.內(nèi)容,代碼表達(dá)為Range("A1).Value
對(duì)象的方法:方法是指在對(duì)象上執(zhí)行的某個(gè)動(dòng)作,例如Range("A1").Select
關(guān)鍵字:關(guān)鍵字是vba中的保留字或符號(hào),例如語句名稱、函數(shù)名稱、運(yùn)算符等都是關(guān)鍵字

3、VBE介紹

  VBE即Visual Basic Editor即VBA的編程環(huán)境

  1)打開VBE編輯器

    Alt+F11(Alt+F8是查看宏)

    依次執(zhí)行:(2003版本)工具——宏——Visual Basic編輯器,(2007以上版本)在“視圖”下的“宏”選項(xiàng)卡下

    右鍵單擊工作表標(biāo)簽,執(zhí)行“查看代碼”命令

  2)主窗口:包含“工程資源管理器”、“屬性窗口”、“菜單欄”、“工具欄”、“代碼窗口”、“立即窗口”

    

  3)菜單欄:包含VBE中各種組件的命令

  4)工具欄:可以在“視圖”——“工具欄”菜單里顯示或隱藏

  5)工程資源管理器:在這里可以看到所有打開的Excel工作簿和已加載的宏,一個(gè)Excel的工作簿就是一個(gè)工程,工程名稱為“VBA Project(工作簿名稱)”,這里最多可以顯示工程里的4類對(duì)象,即Excel對(duì)象(包括sheet對(duì)象和ThisWorkbook對(duì)象)、窗體對(duì)象、模塊對(duì)象和類模塊對(duì)象。

    

  6)屬性窗口:在這里查看或設(shè)置對(duì)象的屬性

  7)代碼窗口:包含對(duì)象列表框、過程列表框、邊界標(biāo)識(shí)條、視圖按鈕、代碼編輯區(qū)、過程分界線。

    

  8)立即窗口:一個(gè)重要用途是用來調(diào)試代碼,想顯示立即窗口,可以在視圖選項(xiàng)卡中選擇或者用快捷鍵“Ctrl+G”

4、牛刀小試:用vba生成工資條

Sub 生成工資條()
'
' 生成工資條 宏
'
' 快捷鍵: Ctrl+m
'
    Application.ScreenUpdating = False
    For i = 2 To 7
        ActiveCell.Rows("1:1").EntireRow.Select
        Selection.Copy
        ActiveCell.Offset(2, 0).Rows("1:1").EntireRow.Select
        Selection.Insert Shift:=xlDown
        ActiveCell.Select
    Next
End Sub

二、VBA數(shù)據(jù)類型

1、VBA中的數(shù)據(jù)類型

數(shù)據(jù)類型就是對(duì)同一組數(shù)據(jù)的統(tǒng)稱,如文本、日期、數(shù)值等。

VBA里的數(shù)據(jù)類型有:字節(jié)型(Byte)、整數(shù)型(Integer)、長整數(shù)型(Long)、單精度浮點(diǎn)型(Single)、雙精度浮點(diǎn)型(Double)、貨幣型(Currency)、小數(shù)型(Decimal)、字符串型(String)、日期型(Date)、布爾型(Boolean)等,如表3-1

類型聲明符:用特殊符號(hào)代替變量類型進(jìn)行變量類型聲明,例如Dim str$ 中$代表String類型。只有部分?jǐn)?shù)據(jù)類型可以使用類型聲明符。

integer % 短整型
long & 長整型
single ! 單精度浮點(diǎn)型
double # 雙精度浮點(diǎn)型
currency @ 貨幣型
string $ 字符型

三、VBA變量、常量

1、變量命名要求

變量必須以字母或漢字開頭,不能包含空格、句號(hào)、感嘆號(hào)、@、&、$和#,最長不能超過255個(gè)字符(一個(gè)漢字計(jì)2個(gè)字符)

2、聲明變量

單變量定義:Dim 變量名 As 數(shù)據(jù)類型

  示例:

  Dim str As String  聲明一個(gè)String類型(變長)的變量,名稱是str

  Dim str As String*10  聲明一個(gè)String類型(定長,最大存儲(chǔ)10個(gè)字符)的變量,名稱為str

  Dim str$  聲明一個(gè)String(變長)類型變量,$變量類型聲明符,代表String

多變量定義(變量類型相同):Dim 變量1,變量2,…… As 數(shù)據(jù)類型

  Dim x, y, z As String (其中,只有z為String型,x, y變量均為variant類型)

  Dim x$ y$ z$ (3個(gè)String型)

多變量定義(變量類型不同):Dim 變量1 As 數(shù)據(jù)類型1,變量2 As 數(shù)據(jù)類型2

  Dim str As String,nu As Integer  不同變量之間用逗號(hào)隔開

  不指定類型的變量定義,默認(rèn)為Variant類型

  Dim str  每個(gè)變量都要指定數(shù)據(jù)類型,如果不指定,默認(rèn)為Variant類型

3、聲明常量

常量定義:Const 變量名稱 As 數(shù)據(jù)類型=數(shù)值

示例:

Const pi As Single=3.14

4、變量的作用域

Public 變量名稱 As 數(shù)據(jù)類型  【公有變量】

Private 變量名稱 As 數(shù)據(jù)類型  【私有變量】

Static 變量名稱 As 數(shù)據(jù)類型  【靜態(tài)變量,整個(gè)代碼運(yùn)行期間值不變】

單個(gè)變量:本地變量

單個(gè)模塊:模塊級(jí)變量,用Dim或Private

所有模塊:公共變量,用Public

5、強(qiáng)制聲明所有變量(未定義變量則提示,否則不提示)

Option Explicit  在模塊的第一句表示。

可以在VBE下的“工具”——“選項(xiàng)”——“編輯器”選項(xiàng)卡中進(jìn)行設(shè)置,這里設(shè)置后,每個(gè)模塊的第一句會(huì)自動(dòng)寫下“Option Explicit”,無需手動(dòng)輸入。

6、給變量賦值

給文本、數(shù)值、日期等數(shù)據(jù)類型變量賦值

  語句為:[Let]變量名稱 = 數(shù)據(jù)  這里的Let可以省略,即:變量名稱=數(shù)據(jù)

  例如:

  Dim str As String

  Let str = “一起來學(xué)習(xí)VBA”

給對(duì)象變量(object型,例如單元格)賦值

  語句為:Set 變量名稱=對(duì)象  這里Set千萬不能少。

  例如:

  Dim rng = Range    '聲明rng變量為Range類型

  Set rng = Worksheets("sheet1").Range("A1")  '給變量rng賦值

  rng.Value="歡迎來到ExcelHome論壇"    '將文本寫入變量指定的單元格

四、VBA數(shù)組

1、一維數(shù)組

聲明:Public|Dim 數(shù)組名(a to b) As 數(shù)據(jù)類型

示例:

Dim 七6班(1 to 50) As String '聲明一個(gè)String類型的數(shù)組,名稱為“七6班”,可以存儲(chǔ)50個(gè)元素。

等價(jià)于:

Public|Dim Arr(0 to 49) As String

Public|Dim Arr(49) As String '數(shù)組索引默認(rèn)是從0開始計(jì)數(shù),如果在模塊的第一句寫“Option Base 1”,則數(shù)組的起始索引從1開始,而不是0.

七6班(1)="張青"

七6班(2)="鄧城"

……

七6班(50)="馮吉"

2、多維數(shù)組:

Dim 醬油(1 to 3,1 to 20)

等價(jià)于

Dim 醬油(2,19)

3、多維動(dòng)態(tài)數(shù)組

  不確定數(shù)組中存儲(chǔ)多少個(gè)元素,即不能預(yù)知元素的大小,可以在首次定義數(shù)組時(shí)括號(hào)內(nèi)為空,寫成:

  Dim 數(shù)組名稱()

例子:

Sub dtsz()
    Dim arr() As String '定義多維動(dòng)態(tài)數(shù)組
    Dim n As Long
    '統(tǒng)計(jì)A列有多少非空單元格
    n = Application.WorksheetFunction.CountA(Range("A:A"))
    MsgBox n
    '使用Dim語句聲明變量時(shí),括號(hào)內(nèi)的參數(shù)不能是變量,所以必須使用ReDim語句重新指定大小
    ReDim arr(1 To n) As String '重新定義數(shù)組的大小
End Sub

4、其他常用的創(chuàng)建數(shù)組的方式

  1)使用Array函數(shù)創(chuàng)建數(shù)據(jù)

Sub ArrayTest()
    Dim arr As Variant '定義變量
    '將1-10的自然數(shù)賦給數(shù)組
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    MsgBox "arr數(shù)組的第2個(gè)元素為:" & arr(1)
End Sub

  2)使用split創(chuàng)建數(shù)組

Sub ArrayTest()
    Dim arr As Variant '定義變量
    '無論是否在模塊中寫入Option Base 1,Split函數(shù)返回的數(shù)組的最小索引都是0
    arr = Split("鄧成,林梅,張青,孔麗,馮吉維,孔佳", ",") '第一個(gè)參數(shù)包含分隔符或字符串變量,第二個(gè)參數(shù)是分隔符
    MsgBox "arr數(shù)組的第2個(gè)元素為:" & arr(1)
End Sub

  3)通過Range對(duì)象直接創(chuàng)建數(shù)組

Sub ArrayTest()
    Dim arr As Variant '定義變量
    arr = Range("A1:C3").Value '將A1:C3單元格內(nèi)容存儲(chǔ)到數(shù)組arr里
    Range("E1:G3").Value = arr '將數(shù)組arr的數(shù)據(jù)寫入大E1:G3
    '將數(shù)組的值寫入到單元格區(qū)域時(shí),單元格區(qū)域的大小必須與數(shù)組相同
End Sub

5、數(shù)組相關(guān)函數(shù):UBound和LBound函數(shù)

UBound(arr) 獲取數(shù)組arr的最大索引號(hào)

LBound(arr) 獲取數(shù)組arr的最小索引號(hào)

數(shù)組的元素個(gè)數(shù)可以表示為:UBound(arr)-LBound(arr)+1

Sub arrcount()
    Dim arr(10 To 50)
    'Char(13)表示回車,_表示代碼換行連接符
    MsgBox "數(shù)組的最大索引號(hào)是:" & UBound(arr) & Chr(13) _
    & "數(shù)組最小的索引號(hào)是:" & LBound(arr) & Chr(13) _
    & "數(shù)組的元素個(gè)數(shù)是:" & UBound(arr) - LBound(arr) + 1
End Sub

Sub arrcount()
    Dim arr(1 To 10, 1 To 100)
    'Char(13)表示回車,_表示代碼換行連接符
    MsgBox "第一維的最大索引號(hào)是:" & UBound(arr, 1) & Chr(13) _
    & "第二維的最小索引號(hào)是:" & LBound(arr, 2)
End Sub

6、數(shù)組相關(guān)函數(shù):Join函數(shù)

將一個(gè)以為數(shù)組里的元素使用指定的分隔符連接成一個(gè)新的字符串

Sub joinTest()
    Dim arr As Variant, txt As String
    arr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    '分割符@可以省略,如果省略,默認(rèn)使用空格作為分隔符
    txt = Join(arr, "@")
    MsgBox txt
End Sub

將數(shù)組寫入單元格區(qū)域

Sub ArrToRng1()
    Dim arr As Variant
    arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
    '將一維數(shù)組寫入單元格區(qū)域,單元格區(qū)域必須在同一行。如果要寫入垂直的一列單元格區(qū)域,必須先使用工作表的Transpose函數(shù)進(jìn)行轉(zhuǎn)換
    Range("A1:A9").Value = Application.WorksheetFunction.Transpose(arr)
End Sub

五、VBA運(yùn)算符

1、算術(shù)運(yùn)算符

用于算術(shù)運(yùn)算,返回值類型為數(shù)值型。

2、比較運(yùn)算符

用于比較運(yùn)算

3、連接運(yùn)算符

連接運(yùn)算符用來連接兩個(gè)文本字符串,有+和&兩種

示例:

a="歡迎來到"

b="ExcelHome論壇!"

?a+b      '問號(hào)?告訴VBA在立即窗口中顯示問號(hào)后面命令的結(jié)果,可以用Print關(guān)鍵字代替問號(hào)。

歡迎來到ExcelHome論壇!

?a & b

歡迎來到ExcelHome論壇!

?4+5 '符號(hào)+兩邊都是數(shù)值,執(zhí)行算術(shù)運(yùn)算

9

?"4"+5 '其中5是數(shù)值,執(zhí)行算術(shù)運(yùn)算

9

?"4"+"5" '兩個(gè)都是文本,執(zhí)行連接運(yùn)算

45

4、邏輯運(yùn)算符

邏輯運(yùn)算符用于判斷邏輯運(yùn)算式的真假,參與邏輯運(yùn)算的數(shù)據(jù)為邏輯型數(shù)據(jù),返回結(jié)果為Boolean型,只能為True或False。

5、VBA中的通配符

6、運(yùn)算符優(yōu)先級(jí)

在VBA中要優(yōu)先處理蒜素運(yùn)算符,接著處理連接運(yùn)算符,然后處理比較運(yùn)算符,最后再處理邏輯運(yùn)算符,可以用括號(hào)來改變運(yùn)算順序。

7、換行符

VBA中字符換行顯示需要使用換行符來完成。下面是常用的換行符
   'chr(10) 可以生成換行符
   'chr(13) 可以生成回車符
   'vbcrlf 換行符和回車符
   'vbCr 等同于chr(10)
   'vblf 等同于chr(13)
'例:
Sub test3()
  MsgBox "我愛" & Chr(10) & "Excel"
 ' MsgBox "我愛你" & Chr(13) & "Excel"
 ' MsgBox "今天" & vbCrLf & "我是大王"

End Sub

六、VBA內(nèi)置函數(shù)

使用VBA中內(nèi)置函數(shù)與在工作表中使用工作表函數(shù)類似。

例如,我們想知道當(dāng)前系統(tǒng)時(shí)間

Sub NowTime()
    MsgBox "現(xiàn)在的時(shí)間是:" & Time()
End Sub

VBA中的內(nèi)置函數(shù)有哪些?查看VBA內(nèi)置函數(shù)的方法:

1、在VBE中“幫助(H)”——“Microsoft Visual Basic 幫助(H) F1”——“Visual Basic 語言參考”——“函數(shù)” 或者在VBE下快捷鍵“F1”

地址:https://docs.microsoft.com/zh-cn/office/vba/language/reference/functions-visual-basic-for-applications

2、在VBE代碼窗口中首先鍵入“VBA.”系統(tǒng)會(huì)自動(dòng)提示“函數(shù)列表”,如圖

七、VBA控制結(jié)構(gòu)

1、If…Then語句

Sub SayHello1()
    If Time < 0.5 Then MsgBox "早上好!"
    If Time >= 0.5 Then MsgBox "下午好!"
End Sub

Sub SayHello2()
    If Time < 0.5 Then
        MsgBox "早上好!"
    Else
        MsgBox "下午好!"
    End If
End Sub

Sub SayHello3()
    If Time < 0.5 Then
        MsgBox "早上好!"
    ElseIf Time > 0.75 Then
        MsgBox "晚上好!"
    Else
        MsgBox "下午好!"
    End If
End Sub

2、Select Case語句

Sub SayHello1()
    Select Case Time
        Case Is < 0.5
            MsgBox "早上好!"
        Case Is > 0.75
            MsgBox "晚上!"
    End Select
End Sub

Sub SayHello2()
    Select Case Time
        Case Is < 0.5
            MsgBox "早上好!"
        Case Is > 0.75
            MsgBox "晚上!"
        Case Else
            MsgBox "下午好!"
    End Select
End Sub

Sub xingji()
    Dim xj As String
    Select Case Cells(2, "H")
        Case Is < 85
            xj = "不評(píng)定"
        Case Is < 100
            xj = "一星級(jí)"
        Case Is < 115
            xj = "二星級(jí)"
        Case Is < 130
            xj = "三星級(jí)"
        Case Is < 150
            xj = "四星級(jí)"
        Case Else
            xj = "五星級(jí)"
    End Select
    Cells(2, "I") = xj
End Sub

3、For…Next語句

語法結(jié)構(gòu):

For <循環(huán)變量>=<初值>To<終值> [Step 步長值]
  <循環(huán)體>
        [Exit For]  '可以在循環(huán)體中任意處加一句或多句Exit For,當(dāng)遇到這個(gè)語句,退出For循環(huán),執(zhí)行Next后語句
  <循環(huán)體>
Next [循環(huán)變量]

Sub xingji()
    Dim xj As String, i As Integer
    For i = 2 To 19 Step 1
        Select Case Cells(i, "H")
            Case Is < 85
                xj = "不評(píng)定"
            Case Is < 100
                xj = "一星級(jí)"
            Case Is < 115
                xj = "二星級(jí)"
            Case Is < 130
                xj = "三星級(jí)"
            Case Is < 150
                xj = "四星級(jí)"
            Case Else
                xj = "五星級(jí)"
        End Select
        Cells(i, "I") = xj
    Next i
End Sub

4、Do While語句

語法結(jié)構(gòu)1:

Do [While 邏輯表達(dá)式]
    <循環(huán)體>
    [Exit Do]
    [循環(huán)體]
Loop

對(duì)應(yīng)示例:

Sub xingji()
    Dim xj As String, i As Integer
    i = 2
    Do While Cells(i, "H") <> ""
        Select Case Cells(i, "H")
            Case Is < 85
                xj = "不評(píng)定"
            Case Is < 100
                xj = "一星級(jí)"
            Case Is < 115
                xj = "二星級(jí)"
            Case Is < 130
                xj = "三星級(jí)"
            Case Is < 150
                xj = "四星級(jí)"
            Case Else
                xj = "五星級(jí)"
        End Select
        Cells(i, "I") = xj
    i = i + 1
    Loop
End Sub

語法結(jié)構(gòu)2

Do
    <循環(huán)體>
    [Exit Do]
    [循環(huán)體]
Loop  [While 邏輯表達(dá)式]

對(duì)應(yīng)示例:

Sub xingji()
    Dim xj As String, i As Integer
    i = 2
    Do
        Select Case Cells(i, "H")
            Case Is < 85
                xj = "不評(píng)定"
            Case Is < 100
                xj = "一星級(jí)"
            Case Is < 115
                xj = "二星級(jí)"
            Case Is < 130
                xj = "三星級(jí)"
            Case Is < 150
                xj = "四星級(jí)"
            Case Else
                xj = "五星級(jí)"
        End Select
        Cells(i, "I") = xj
    i = i + 1
    Loop While Cells(i, "H") <> ""
End Sub

5、Do Until語句

  do Until 后的邏輯表達(dá)式為False則執(zhí)行循環(huán)體,否則退出循環(huán),跟Do While相反。

語法結(jié)構(gòu)1:

Do [Until 邏輯表達(dá)式]
    <循環(huán)體>
    [Exit Do]
    [循環(huán)體]
Loop

對(duì)應(yīng)示例:

Sub xingji()
    Dim xj As String, i As Integer
    i = 2
    Do Until Cells(i, "H") = ""
        Select Case Cells(i, "H")
            Case Is < 85
                xj = "不評(píng)定"
            Case Is < 100
                xj = "一星級(jí)"
            Case Is < 115
                xj = "二星級(jí)"
            Case Is < 130
                xj = "三星級(jí)"
            Case Is < 150
                xj = "四星級(jí)"
            Case Else
                xj = "五星級(jí)"
        End Select
        Cells(i, "I") = xj
    i = i + 1
    Loop
End Sub

語法結(jié)構(gòu)2:

Do
    <循環(huán)體>
    [Exit Do]
    [循環(huán)體]
Loop [Until 邏輯表達(dá)式]

對(duì)應(yīng)示例:

Sub xingji()
    Dim xj As String, i As Integer
    i = 2
    Do
        Select Case Cells(i, "H")
            Case Is < 85
                xj = "不評(píng)定"
            Case Is < 100
                xj = "一星級(jí)"
            Case Is < 115
                xj = "二星級(jí)"
            Case Is < 130
                xj = "三星級(jí)"
            Case Is < 150
                xj = "四星級(jí)"
            Case Else
                xj = "五星級(jí)"
        End Select
        Cells(i, "I") = xj
    i = i + 1
    Loop Until Cells(i, "H") = ""
End Sub

6、For Each…Next語句

當(dāng)前活動(dòng)工作簿中有許多工作表,但并不知道數(shù)量。如果要把所有工作表的名稱按次序?qū)懭牖顒?dòng)工作表的A列,F(xiàn)or Each…Next是更適合的循環(huán)。

For Each 元素變量 In 集合名稱或數(shù)組名稱
    <語句塊1>
    [Exit For]
    [語句塊2]
Next [元素變量]

示例1:

Sub shtName()
    Dim sht As Worksheet, i As Integer
    i = 1
    For Each sht In Worksheets
        Cells(i, "A") = sht.Name
        i = i + 1
    Next sht
End Sub

示例2:

Sub shtName()
    Dim c As Range, i As Integer
    i = 1
    For Each c In Range("A1:A10")
        c.Value = i
        i = i + 1
    Next c
End Sub

7、GoTo語句

“去到指定地點(diǎn)”,用來讓程序轉(zhuǎn)到另外一條語句去執(zhí)行。

Sub he()
    Dim mysum As Long, i As String
    i = 1
x:    mysum = mysum + i
    i = i + 1
    If i <= 100 Then GoTo x
    MsgBox "1到100的自然數(shù)和是:" & mysun
    
End Sub

8、With語句

當(dāng)需要對(duì)相同的對(duì)象進(jìn)行多次操作時(shí),會(huì)編寫一些重復(fù)代碼

Sub FontSet()
    With Worksheets("sheet1").Range("A1").Font
        .Name = "仿宋"
        .Size = 12
        .Bold = True
        .ColorIndex = 3
    End With  '這里的With語句結(jié)束標(biāo)志,不可缺少
End Sub

八、過程Sub

1、Sub定義語句

聲明sub過程的規(guī)范語句

'所有[]內(nèi)容都是可選的
'Exit Sub:可選語句,執(zhí)行它將中斷執(zhí)行并退出過程
'如果選用Static,運(yùn)行程序的過程中將保存該過程里聲明的本地變量
'Private和Public用于聲明過程的作用域名,如果省略,過程默認(rèn)為公共過程
[Private|Public][Static] Sub 過程名([參數(shù)列表])
    [語句塊]
    [Exit Sub]
    [語句塊]
End Sub

2、Sub間調(diào)用

被調(diào)用過程定義:

Sub SayHello()
    If Time < 0.5 Then
        MsgBox "早上好!"
    ElseIf Time > 0.75 Then
        MsgBox "晚上好!"
    Else
        MsgBox "下午好!"
    End If
End Sub

方法一:過程名[參數(shù)1,參數(shù)2…]

Sub RunSub()
    SayHello
End Sub

帶參數(shù)調(diào)用

Sub PrintInfo(info)
    MsgBox info
End Sub

Sub RunPara()
    PrintInfo ("Hello World")
End Sub

方法二:Call 過程名[(參數(shù)1,參數(shù)2…)]

Sub RunSub()
    Call SayHello
End Sub

方法三:利用Application對(duì)象的Run方法,Application.Run 表示過程名的字符串(或字符串變量)[,參數(shù)1,參數(shù)2…]

Sub RunSub()
    Application.Run "SayHello"
End Sub

3、過程的作用域

公共過程:可以跨模塊調(diào)用,用Public 或省略不寫。

Public Sub gggc()
    MsgBox "我是公共過程"
End Sub

私有過程:只能在模塊內(nèi)調(diào)用,用Private

Private Sub gggc()
    MsgBox "我是私有過程"
End Sub

九、自定義Function

Function過程也稱為函數(shù)過程,編寫一個(gè)Function過程,就是編寫一個(gè)函數(shù)。

1、定義語法格式

'最后必須將結(jié)果賦值給函數(shù)名稱
[Private|Public][Static] Function 函數(shù)名([參數(shù)列表])[As 數(shù)據(jù)類型]
    [語句塊]
    [函數(shù)名=過程結(jié)果]
    [Exit Function]
    [語句塊]
    [函數(shù)名=過程結(jié)果]
End Function

2、定義函數(shù)

定義函數(shù):生成1-10之間的隨機(jī)整數(shù)

Public Function Fun()
    Fun = Int(Rnd() * 10) + 1
End Function

3、使用函數(shù)

使用函數(shù)方法一:直接在單元格加“=”調(diào)用

使用函數(shù)方法二:通過“函數(shù)”——“用戶定義” 選擇

用戶定義函數(shù)可以和其他函數(shù)嵌套使用

在VBA過程中使用自定義函數(shù)

Sub msg()
    MsgBox Fun()
End Sub

4、函數(shù)實(shí)例

RGB函數(shù)中,R代表紅色,G代表綠色,B代表藍(lán)色

RGB(255,255,0) 表示黃色

判斷單元格是否是黃色,是則返回1,否則返回0

'最后必須將結(jié)果賦值給函數(shù)名稱
Function CountColor()
    If Range("A1").Interior.Color = RGB(255, 255, 0) Then
        CountColor = 1 '如果是黃色,函數(shù)值等于1
    Else
        CountColor = 0
    End If
End Function

統(tǒng)計(jì)指定顏色的單元格個(gè)數(shù)

'最后必須將結(jié)果賦值給函數(shù)名稱
Function CountColor()
    Dim rng As Range
    For Each rng In Range("A1:A10")
        If rng.Interior.Color = RGB(255, 255, 0) Then
            CountColor = CountColor + 1
        End If
    Next rng
End Function

用參數(shù)指定計(jì)算區(qū)域

'最后必須將結(jié)果賦值給函數(shù)名稱
Function CountColor(arr As Range)
    Dim rng As Range
    For Each rng In arr
        If rng.Interior.Color = RGB(255, 255, 0) Then
            CountColor = CountColor + 1
        End If
    Next rng
End Function

給自定義函數(shù)第2個(gè)參數(shù)

'最后必須將結(jié)果賦值給函數(shù)名稱
Function CountColor(arr As Range, c As Range)
    Dim rng As Range
    For Each rng In arr
        If rng.Interior.Color = c.Interior.Color Then
            CountColor = CountColor + 1
        End If
    Next rng
End Function

設(shè)置自定義函數(shù)為易失性函數(shù)

工作表重新計(jì)算(按F9重新計(jì)算,或重啟工作簿)之后,自定義函數(shù)并不會(huì)重新計(jì)算。

如果將自定義函數(shù)設(shè)置為易失性函數(shù),無論何時(shí)重新計(jì)算工作表,函數(shù)都會(huì)重新計(jì)算。

使用命令:Application.Volatile True

'最后必須將結(jié)果賦值給函數(shù)名稱
Function CountColor(arr As Range, c As Range)
    Application.Volatile True
    Dim rng As Range
    For Each rng In arr
        If rng.Interior.Color = c.Interior.Color Then
            CountColor = CountColor + 1
        End If
    Next rng
End Function

十、代碼美化

合理縮進(jìn):tab

取消縮進(jìn):Shift+Tab

更改長行代碼為短行代碼,在子句后面輸入一個(gè)空格和一個(gè)下劃線(_),然后換行,這就把一行代碼分成兩行。

Sub test()
    Application.Workbooks("Book1").Worksheets("sheet1") _
            .Range("A1:D100").Font.Bold = True
End Sub

把多行合并為一行,在第一行代碼后加上英文冒號(hào)(:),可以接著寫第二行代碼

Sub test()
    Dim a%, b%, c%: a = 1: b = 2: c = 3
End Sub

注釋:用英文單引號(hào)(')表示后面的語句為注釋

注釋Rem:用Rem注釋只能注釋一整行,注釋行不能有代碼邏輯

Sub test()
    '=================注釋
    Application.Workbooks("Book1").Worksheets("sheet1") _
            .Range("A1:D100").Font.Bold = True
    Rem ==============注釋
End Sub

批量注釋:在VBE窗口中,“視圖”——“工具”——“編輯”——“設(shè)置注釋塊” 【或解除注釋塊】

十一、VBE其他設(shè)置

自動(dòng)列出成員設(shè)置:VBE下“工具”——“選項(xiàng)”——“編輯器”選項(xiàng)卡下——“自動(dòng)列出成員”

總結(jié)

以上是生活随笔為你收集整理的Excel-VBA基础语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。