目录索引
在Excel中启用VBA变量的强制声明静态变量静态变量值消失的情况 常量 循环语句FOR循环Do While循环Do Until循环Do……Loop While循环 IF判断语句逻辑运算符录制宏与字符串拼接在Excel中启用VBA
不同版本的Excel启用VBA的方式不同,以我工作中使用的Excel为例
首先,单击左上角菜单按钮,在单击弹出框中右下角的“Excel选项”
选择左侧信任中心选项卡,再选择信任中心设置。随后在“宏设置”中选择“启用所有宏”
随后返回Excel选项窗口,在常用选项卡中勾选“在功能区显示“开发工具”选项卡”
我们就可以在Excel顶部看到VBA编程所要用到的选项卡啦
变量的强制声明
//声明变量Sub mysub()Dim a,b,c//为了防止发生歧义,应在生命变量后给变量赋初值.若未赋初值,则为默认值.此行代码中a,b,c为变体类型,默认初值为EmptyDim num As Integer//若声明的变量为Int类型,则默认初值为0Dim s As String//若声明的变量为String类型,则默认初值为空字符串,即"" End Sub//VBA中即使不声明变量,也能直接使用,例如直接写r = 2
但为减少程序错误,应使用
变量的强制声明
必须写在一个模块的第一行,即所有的Sub……End Sub之前
Option Explicit//此时,若再使用未声明的变量,就会报错Sub subname()r = 2MsgBox r//程序运行至此处时报错,变量未声明End Sub
需要注意的一点是,VBA是大小写不敏感的语言
静态变量
声明在Sub之外的模块级变量,不管是public还是private,都是静态变量
Option ExplicitDim r//声明在此处,是静态变量Sub subname()r = r + 1//每次运行,r都会+1,停止运行程序r也不会归零End Sub
静态变量值消失的情况
1、将Excel关闭
常量
VBA中的常量使用关键字Const定义
Sub mycon()Const r = 1r = 2//不应再次赋值,若再次赋值则程序报错MsgBox rEnd Sub
常量在定以后不可改变
循环语句
FOR循环
VBA中的FOR循环与JAVA、C#中的FOR循环逻辑相同,语法如下
Option ExplicitSub myFor()Dim sum, iFor i = 1 To 100 Step 1//代表i从1变化到100,每次变化量为1.如果不写Step n的话,默认为Setp 1sum = sum + iNext i//一次For循环结束后,进入下次循环,i的变化量为Setp后面的n值End Sub
Do While循环
当不知道我们的循环要循环多少次的时候,我们将会用到Do While循环
Sub myDoWhile()Dim num, ii = 1num = 0Do While Cells(i, 1) <> ""//当Cells(i,1)不为零的时候,就一直循环num = num + 1i = i + 1//每次循环完,将i+1.如果不写,程序将会陷入死循环Loop//Do While循环以Loop结尾MsgBox numEnd Sub
Do Until循环
如果把Do While循环翻译成汉语,为
当满足所写条件时执行
那么Do Until则代表
执行直到满足所写条件
Sub myUntil()Dim r, sumr = 1Do Until r > 100//直到人>100时才停止执行sum = sum + rr = r + 1LoopMsgBox sumEnd Sub
Do……Loop While循环
将While放在Loop后面,则会是的程序先执行一遍Do的循环体,再去判断一下是否符合条件
Sub myLoop()Dim r As Integer, sum As Integerr = 1Do//先执行一下sum=sum+1和r=r+1sum = sum + rr = r + 1Loop While r > 1//程序第一次执行到这里进行判断时,r=2,条件成立,所以继续执行//然后会不断循环,最后导致溢出报错MsgBox sumEnd Sub
IF判断语句
VBA中的IF判断语句与JAVA、C#中的IF判断大致相同,具体语法如下
Option ExplicitSub myIf()Dim score, iscore = 90If score>90 Then//记得每个IF条件后跟 Then,否则程序报错i = "优秀"ElseIf score>80 Then//ElseIf是连续的,中间不带空格i = "良好"ElseIf score > 60 Theni = "及格"Elsei = "不及格"End If//,每个IF结束处跟EndIf.//若IF只有一次判断,则不用写EndIf,例如Dim ii = 2If i = 1 Then MsgBox iIf i = 2 Then MsgBox iEnd Sub
逻辑运算符
三种逻辑运算符
NOT 非,
AND 与,
OR 或
逻辑运算符的优先级
NOT>AND>OR
而更常用的,我们用()去规定它们的判断顺序
录制宏与字符串拼接
利用Excel中的录制宏功能,开始录制后我们的操作会被逐步转化为代码显示在VBE中
Sub 删除一行()//这是我们进行删除一行操作 的录制宏Rows("21:21").SelectSelection.Delete Shift:=xlUpEnd Sub
而我们或许希望将这个删除行的操作运用到一个IF判断和FOR循环中,循环删除我们需要删除的行
我们只需要对录制宏作出一定的改变,运用字符串拼接将固定行“21:21”改为可变化的行
Sub 删除空行()//删除1-100行中第二列没有数据的行For i = 100 To 1 Step -1//从第100行倒叙循环,所以Step为-1If Cells(i,2) = "" ThenRows(i & ":" & i).Select//将“21:21”改为用&拼接的字符串,&前后都要有空格Selection.Delete Shift:=xlUpEnd IfNext iEnd Sub
需要特别注意,& 前后必须有空格,否则意思为将&之前的字符转化为long类型的数字