ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

02. VBA从入门到精通——基础语法

2026/8/13 15:24:28 拓冰建站 浏览量
02. VBA从入门到精通——基础语法

数据类型

  • 常用数据类型

        Integer:整数,-32,768到32,767之间的整数

        Long:较长长整数,-2,147,483,648到2,147,483,647之间的整数

        Single:浮点数,它可以存储大约:6到7位小数的精度。

        Double:较长浮点数,大约15位小数的精度

        Boolean:布尔值,只有两个取值,True和False

        Date:日期

        Object:任何对象引用

        String:字符串

  • 自定义数据类型

        标准模块中需要使用Type语句,类模块中需要使用Private Type

        示例:

Type AA ID As IntegerName As StringPhone As Long
end Type

声明及使用常量

数值常量:如1、3.7

字符常量:用双引号表示,如"AA"

符号常量:声明符号常量时可以同时定义数据类型

        用法:

                Const 常量名 = 常量值

        示例:

                Const Name = "小明"

                Const Name As String = "小明"

逻辑常量:只有两个:True、False

日期常量:有两种表示方法

        示例:

                (1) a = #20/1/2024#

                (2) a = "2024-3-2"

内置常量:一般以vb或xl为前缀,有颜色、星期、按钮、符号(如换行符)等相关内置常量

MsgBox的Buttons参数

vbOKOnly:对应值为0,只显示“确定”按钮,即默认情况,而0也无需在参数中特意指明。

vbOKCancel:对应值为1,同时显示“确定”和“取消”按钮。

vbAbortRetryIgnore:对应值为2,同时显示“中止”、“重试”、“忽略”按钮。

vbYesNoCancel:对应值为3,显示“是”、“否”、“取消”按钮。

vbYesNo:对应值为4,显示“是”和“否”按钮。

vbRetryCancel:对应值为5,显示“重试”和“取消”按钮。

示例

Public Sub test()Dim resres = MsgBox("是否进行数据修改", 4)If res = vbYes Then'修改数据语句End IfEnd Sub

         

声明及使用变量      

  • VBA允许使用未定义变量,但容易发生错误,所以一般设置成强制声明变量。

        设置:工具→选项→编辑器→要求变量声明

        模块中Option Explicit 表示强制声明变量

        注意:

                变量要以字母或汉字开头,并只能由字母、汉字、字母、下划线组成

  • 定义变量

        一般使用Dim定义,也可以使用ReDim、Public、Private、Static

        示例:

                Dim XY As string #初始值为空字符串

  • 使用类型标识符定义变量

        (如果设置了强制声明变量,这种方法是不被允许的)

        常用标识符

                $:字符串

                %:整形

                &:长整型

                ! :浮点数

                @:货币型

        示例:

                a$ = "小明

                d! = 1300

  • 定义和使用对象变量

        (用Object作为对象变量通用关键词,为了使程序可读性更强、运行快,最好创建引用到具体对象类型的对象变量,如用Range或Worksheet作为关键词

        声明对象变量:

                Dim Rng As Object  ’声明变量Rng为对象变量

                 Dim Rng As Worksheet  ‘声明要引用一个工作表为对象Rng的值

        赋值对象变量:

                Set Rng = Worksheets("Sheet1").Range("A1:E10")  '赋值对象变量为工作表Sheet1中单元格

  • 定义模块级变量

        模块级变量:是指对模块中所有的子程序和函数都有效的变量

        用法:可在该模块的顶部使用Dim或Private进行声明

       例如:

                Dim x As String,y As String

  • 定义公共变量

        公共变量:对所有模块的子程序和函数都有效

        用法:应在某标准模块的顶部使用Public 进行声明,一般可以创建一个专门保存公共变量的标准模块,以便于查看变量的定义和使用

        例如:

                Public ws As Worksheet

定义数组

  • 定义静态数组

        静态数组:是指维度和大小固定不变的数字

        一维数组:

                Dim A(10) As Long 或 Dim A(0 To 10) As Long '表示从0到10是一个数

        二维数组

                 Dim A(2,10) As Long 或 Dim A(0 To 2,0 To 9) As Long '表示从0到2和从0到10,他们交叉相乘为30,所以数组大小为30

        示例

Sub test()Dim ws As WorksheetDim i As LongDim aa(1 To 9) As StringSet ws = Worksheets("1")For i = 1 To 9aa(i) = ws.Range("A" & i + 1)Next iEnd Sub
  • 定义动态数组

        动态数组:是指在程序运行时其大小可以变化,使用动态数组可以节省内存,加快运行速度

        用法:

                ReDim ABC(n) As String

        注意:动态属于组的声明语句必须放在数组元素变量赋值语句后面

        补充:Excel VBA中使用Range时,有一个End属性,以Range单元格为基准定位到其上、下、左、右最后一个有数据的单元格,也可以用数字表示。

                其中1代表:xlToLeft 
                其中2代表:xlToRight
                其中3代表:xlup
                其中4代表:xldown

        示例:          

Sub AA()Dim i As IntegerDim n As Integern = Range("A10000").End(xlUp).Row - 1 '表示表中A10000区域内最后一行的行号ReDim AA(1 To n) As StringFor i = 1 To nAA(i) = Range("A" & i)Next iEnd Sub
  • 将数组的缺省下界设置为1

        缺省时默认为0

        方法一:

                dim A(1 to 3) as string

                redim A(1 to n) as string

        方法二:在模块顶部写入如下语句

                Option Base 1

  • 获取数组的最小下标和最大下标

        LBound() 获取最小下标

        UBount() 获取最大下表

        示例:

                Dim a(10,2,4) As String

                MsgBox LBound(a,3) ’表示第三维度的最小下标

数据运算规则及运算符

  • 赋值运算符

        = 

  • 数学运算符:

        +、-、*、/、\、-、^   '加、减、乘、除、整除、符号、乘幂

  • 比较运算符:

        =、<>(不等于)、>、<、>=、<=、Like(字符串模糊匹配)、Is(逻辑)

        示例:表示判断A列表里有媒体字样和B列表匹配北京就输出

                If Range("A" & i) Like "*媒体*" And Range("B" & i) = "背景" Then

                        MsgBox "客户:" & Range("A" & i)

  • 逻辑运算符:

        Not '非

        And '与

        Or '或

        Xor '异或

        Eqv '相等

        Imp '逻辑蕴含

  • 字符连接运算:

        & '可连接任意数据

        + '只能连接文本字符

语句基础知识              

循环语句

For ... Next循环语句

提示:

        循环数组中的所有元素,可以利用UBound和LBound然后通过For...Next进行循环

        循环集合中所有对象:也可以利用集合中Count属性获取集合对象个数通过For..Next进行循环

语法:

        For 计数器 = 初始值 To 终值 [步长]         '步长可以为负数,默认为1

                [循环体]

                [Exit For]         '退出循环,一般设置一个条件判断语句

                [循环体]

        Next 计数器        '计数器 = 计数器 + 步长

示例:九九乘法表              

Public Sub test()Dim i As Integer, j As IntegerRange("A1") = "九九乘法表"For i = 1 To 9For j = 1 To iCells(i + 1, j) = i & "*" & j & "=" & i * jNext jNext iEnd Sub

结果显示:            

For Each...Next 循环语句 

        For Each...Next 是对集合中所有元素进行循环

        语法:

                For Each 集合中元素 In 集合

        示例:循环当前工作博中所有工作表,并把表名输出到当前工作表A列

                

Public Sub test()Dim ws As WorksheetDim i As Integeri = 1For Each ws In ThisWorkbook.Worksheets '把表对象赋值给wsRange("A" & i) = ws.Namei = i + 1NextSet ws = NothingEnd Sub

Do ... Loop 循环

for 循环一般用在已经循环多少次的情况,当未知时一般使用Do...Loop循环

  • 第一中结构:先判定在循环

        Do While 判定条件

                循环体

        Loop

  • 第二种结构:先循环在判定

        Do

                循环体

        Loop While 判定条件

  • 第三种结构:判定条件为False时执行循环

        Do Until 判定条件

                循环体

        Loop

  • 第四种结构:

        Do

                循环体

        Loop Until 判定条件

  • 推出Do循环:Exit Do,一般设置判断语句

使用While ... Wend 循环

条件成立就执行类似Do While .. Loop

语法结构:

        While 条件判断

                循环体

        Wend

条件控制语句

单行语法:如果符合就语句1否则就语句2

        If 条件 Then 语句 1 [Else 语句2]

多行语法一:如果符合就语句

        If 条件 Then

                语句块

        End If

多行语法二:如果符合就语句1否则就语句2

        If 条件 Then

                语句1

        Else

                语句2

        End If

多行语法三:

        If 条件1 Then

                语句1

        ElseIf 条件2

                语句2

        ElseIf 条件3

                语句3

        ...

        [ Else

                语句n ]

        End If        

补充:Exit Sub '表示退出程序,可以跟条件语句结合使用

示例:

Public Sub test()Dim resres = MsgBox("是否进行数据修改", vbYesNo + vbQuestion)If res = vbYes Then'修改数据语句End IfEnd Sub

Select Case语句        

在使用多分支语句比较麻烦时可以使用Select Case语句   

语法:

        Select Case 变量或表达式

                Case 值1        ‘如果符合值1就执行语句1

                        语句1

                [Case 值2        '如果符合值2就执行语句2....

                        语句2]

                ....

        End Select

        提示:其中,值1、值2...可以取以下几种形式

                (1)具体常数:如1、2、A、"汉语"..

                (2)连续的数据范围,如1 To 100 ,A To C 等

                (3)满足某哥条件的表达式。如Is关系表达式

                        例: Case Is <5,10,30,40,Is > 100

语句书写技巧

  • 为了简洁明了,可以将多行类似语句写在同一行

        对于赋值语句,需要用冒号隔开

        对于声明语句,需要用逗号隔开

  • 断行:

        在VBA中一行最多255字符,可以在行尾追加一个空格和一个下划线进行换行

  • 两种注释方法:

        (1)'

        (2)Rem ,此时注释语句只能单独一行

使用With语句提高程序运行效率

        当使用对象的诸多属性和方法时,最好使用With语句