1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > VBA学习(一)启用VBA 变量 常量 静态变量 字符串拼接 循环语句与判断语句

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

时间:2018-05-17 11:10:09

相关推荐

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

目录索引

在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类型的数字

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。