VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句

时间:2024-03-23 13:44:55

在Excel中启用VBA

不同版本的Excel启用VBA的方式不同,以我工作中使用的Excel2007为例
VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
首先,单击左上角菜单按钮,在单击弹出框中右下角的“Excel选项”
VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
选择左侧信任中心选项卡,再选择信任中心设置。随后在“宏设置”中选择“启用所有宏”
VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
随后返回Excel选项窗口,在常用选项卡中勾选“在功能区显示“开发工具”选项卡”VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
我们就可以在Excel顶部看到VBA编程所要用到的选项卡啦
VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句

变量的强制声明

//声明变量
Sub mysub()

Dim a,b,c//为了防止发生歧义,应在生命变量后给变量赋初值.若未赋初值,则为默认值.此行代码中a,b,c为变体类型,默认初值为Empty

Dim num As Integer//若声明的变量为Int类型,则默认初值为0

Dim s As String//若声明的变量为String类型,则默认初值为空字符串,即"" 

End Sub
//VBA中即使不声明变量,也能直接使用,例如直接写
r = 2

但为减少程序错误,应使用

变量的强制声明

必须写在一个模块的第一行,即所有的Sub……End Sub之前

Option Explicit//此时,若再使用未声明的变量,就会报错

Sub subname()

r = 2
MsgBox r//程序运行至此处时报错,变量未声明

End Sub

需要注意的一点是,VBA是大小写不敏感的语言

静态变量

声明在Sub之外的模块级变量,不管是public还是private,都是静态变量

Option Explicit

Dim r//声明在此处,是静态变量

Sub subname()

r = r + 1//每次运行,r都会+1,停止运行程序r也不会归零

End Sub

静态变量值消失的情况

1、将Excel关闭

常量

VBA中的常量使用关键字Const定义

Sub mycon()

Const r = 1
r = 2//不应再次赋值,若再次赋值则程序报错

MsgBox r

End Sub

常量在定以后不可改变

循环语句

FOR循环

VBA中的FOR循环与JAVA、C#中的FOR循环逻辑相同,语法如下

Option Explicit

Sub myFor()
Dim sum, i

For i = 1 To 100 Step 1//代表i从1变化到100,每次变化量为1.如果不写Step n的话,默认为Setp 1
    sum = sum + i
Next i//一次For循环结束后,进入下次循环,i的变化量为Setp后面的n值

End Sub

Do While循环

当不知道我们的循环要循环多少次的时候,我们将会用到Do While循环

Sub myDoWhile()

Dim num, i

i = 1
num = 0

Do While Cells(i, 1) <> ""//当Cells(i,1)不为零的时候,就一直循环

    num = num + 1
    
    i = i + 1//每次循环完,将i+1.如果不写,程序将会陷入死循环
    
Loop//Do While循环以Loop结尾

MsgBox num

End Sub

Do Until循环

如果把Do While循环翻译成汉语,为

当满足所写条件时执行

那么Do Until则代表

执行直到满足所写条件

Sub myUntil()

Dim r, sum
r = 1

Do Until r > 100//直到人>100时才停止执行
    
    sum = sum + r
    
    r = r + 1
    
Loop

MsgBox sum

End Sub

Do……Loop While循环

将While放在Loop后面,则会是的程序先执行一遍Do的循环体,再去判断一下是否符合条件

Sub myLoop()

Dim r As Integer, sum As Integer
r = 1

Do//先执行一下sum=sum+1和r=r+1
    
    sum = sum + r
    
    r = r + 1
    
Loop While r > 1//程序第一次执行到这里进行判断时,r=2,条件成立,所以继续执行

//然后会不断循环,最后导致溢出报错
MsgBox sum

End Sub

IF判断语句

VBA中的IF判断语句与JAVA、C#中的IF判断大致相同,具体语法如下

Option Explicit

Sub myIf()

Dim score, i
score = 90

If score>90 Then//记得每个IF条件后跟 Then,否则程序报错
    i = "优秀"
ElseIf score>80 Then//ElseIf是连续的,中间不带空格
    i = "良好"
ElseIf score > 60 Then
    i = "及格"
Else
    i = "不及格"
End If//,每个IF结束处跟EndIf.

//若IF只有一次判断,则不用写EndIf,例如
Dim i
i = 2

If i = 1 Then MsgBox i
If i = 2 Then MsgBox i

End Sub

逻辑运算符

三种逻辑运算符
NOT 非,
AND 与,
OR 或

逻辑运算符的优先级

NOT>AND>OR

而更常用的,我们用()去规定它们的判断顺序

录制宏与字符串拼接

VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
利用Excel中的录制宏功能,开始录制后我们的操作会被逐步转化为代码显示在VBE中

Sub 删除一行()

//这是我们进行删除一行操作 的录制宏

    Rows("21:21").Select
    Selection.Delete Shift:=xlUp
    
End Sub

而我们或许希望将这个删除行的操作运用到一个IF判断和FOR循环中,循环删除我们需要删除的行

我们只需要对录制宏作出一定的改变,运用字符串拼接将固定行“21:21”改为可变化的行

Sub 删除空行()
//删除1-100行中第二列没有数据的行
For  i = 100 To 1 Step -1//从第100行倒叙循环,所以Step为-1

	If Cells(i,2) = "" Then
	    Rows(i & ":" & i).Select//将“21:21”改为用&拼接的字符串,&前后都要有空格
	    Selection.Delete Shift:=xlUp
    End If
    
Next i

End Sub

需要特别注意,& 前后必须有空格,否则意思为将&之前的字符转化为long类型的数字