杨希胭 图片:第四讲 Excel vba 程序及常用语句
来源:百度文库 编辑:中财网 时间:2024/04/29 07:48:23
第四讲 Excel vba 程序及常用语句
本讲内容:Sub过程与程序流程控制语句
主 讲:ggsmart(叶枫)
一、 SUB过程
1 什么是Sub 过程
就是通过代码完成一个任务。
Vba 的过程主要包括“sub过程”和“function函数过程”两种。
Sub过程运行后不可反回值;function函数过程运行后可以返回值。
2 声明sub过程
l 录制“宏”就是一个简单的sub过程。使用录制宏功能只能生成sub过程的代码。
l Sub 过程的特点:
1) 以“sub过程名()”开头,以“end sub”结束;
2) Sub 过程一般保存在模块里;
3) 返回运行结果。
3 Sub语句
[ public | private ] [static] sub 过程名称
([参数1,参数2……])
[语句块]
[Exit Sub]
[语句块]
End sub
注释:[public]公共过程,表面声明的过程是一个公共过程。一个过程被声明为公共过程之后,就表明该过程中所有模块中其他过程都可以访问这个过程。公共过程一般被省略。
[private]私有过程,表明这个过程声明为私有过程。私有过程只能在同一模块中被其他过程可以访问。
[static]过程结束后将保存过程中的变量。
Sub过程是必须的,表明过程的存在。后面括号里的参数是一系列的变量,这些变量将接受传递到过程中的参数值,使用“’”分割参数。如果过程没有参数就必须有一组空的括号。如我们录制的宏就是没有参数的sub过程。
[Exit sub]是在过程正式结束之前强制立即在过程中退出。
End sub必须选择的语句,表示过程的结束。它与sub是一对,再写入sub过程回车后它自用产生。
例如:使用MsgBox对话框显示提示文字“这是我的第一个VBA过程”
代码:Sub mysub()
MsgBox "这是我的第一个VBA过程"
End Sub
例如:使用private过程显示MsgBox对话框的提示文字“这是我的第一个私有过程语句”
代码:Private Sub tset()
MsgBox "这是我的第一个私有过程语句"
End Sub
Sub 语句可以相互调用。调用的方法是只需在另一个程序代码中输入该过程的名称。方法如下:
l 输入过程名以及参数,参数使用逗号隔开。
例如:Sub text()
mysub
技巧:点击“工具”——宏——选择“mysub”,这是就会调出第一个sub过程语句。
l 在过程名称以及参数前使用Call 过程名[(参数1,参数2,…)]
例如:Sub text()
Call mysub
End Sub
l 利用Application对象的run方法
Application。Run表示过程名的字符串(或字符串变量)[,参数1,参数2…]
例如:Sub myapp()
Application.Run "mysub" ‘run之后是空格,表示过程名称的字符串,字符串需要使用英文状态下的双引号括起来
Application.Run "tset"
End Sub
又例如:Sub myapp()
Dim a As String
a = "siyou"
Application.Run a
End Sub
公共模块可以在其他模块调用,私有模块只能在本模块里调用。
二、 判断与循环语句
1. 顺序结果语句:就是从上到下,有程序的第一行语句执行到最后一行语句。如宏代码。
2. 判断分支语句:它是根据条件跳过部分语句执行另一部分的语句。
3. 循环语句:就是循环执行一段语句。
l IF语句
IF 逻辑表达式 Then
语句块1
[Else 语句块2]
End If
代码1.
Sub 出题() '********生成新的题目
[d6].Value = Int(Rnd * 20)
[f6].Value = Int(Rnd * 20)
End Sub
Sub dt()
' If [h6].Value = [d6].Value + [f6].Value Then '***检查是否答对
' MsgBox "答对了,你真棒!"
' End If
' If [h6].Value <> [d6].Value + [f6].Value Then '***检查是否答对
' MsgBox "答错了,继续努力!"
' End If
代码2.
If [h6].Value = [d6].Value + [f6].Value Then '***检查是否答对
MsgBox "答对了,你真棒!"
Else
MsgBox "答错了,继续努力!"
End If
Call 出题 '调用过程,重新生成题目
l If 逻辑表达式1 Then
语句块1
[ElseIf逻辑表达式2 Then
语句块2
Elseif 逻辑表达式3 Then
语句块3
……..
Else
语句块n
End if
代码3.
Sub test()
If [h6].Value = "" Then
MsgBox "还没有输入答案!"
ElseIf [h6].Value = [d6].Value + [f6].Value Then '***检查是否答对
MsgBox "答对了,你真棒!"
Else
MsgBox "答错了,继续努力!"
End If
Call 出题
End Sub
l Select case 语句
If 语句一般是可以嵌套的,他只有二元判断。如果需要在三种或更多判断语句上,一般使用select case 语句。
l Select case 语句测试表达试
Case 表达式列表1
语句块1
Case 表达式列表2
语句块2
Case 表达式列表3
语句块3
………..
Case 表达式列表n
语句块n
Case Else
语句块 n+1
End select
1. 测试表达式必须为数值表达式或字符串表达式,
2. 表达式列表可以是用逗号隔开的表达式,也可以使用 TO 或IS 关键字。如:
l Case1,2,3,4
l Case 1 to 4
l Case is<4
3. case语句后面可以使用多重表达式,各表达式的数据类型可以不相同,他们之间是“逻辑表达式”的关系。如:case 1 to4,”4”
实例2.
代码1. Sub sl1()
Select Case [h6].Value
Case ""
MsgBox "还没有输入答案。"
Case [d6].Value + [f6].Value
MsgBox "答对了,真棒!"
Case Else
MsgBox "答错了,请继续努力!"
End Select
Call 出题 '********重新出题
End Sub
代码:Sub 等sl级()
Dim dj As String
Select Case [d3].Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
[e3].Value = dj
End Sub
l FOR 循环语句
For —next 循环语句
For 循环变量 = 初值 To 终值 [ spet 步长]
循环体
[Exit For]
循环体
代码:Sub sum1to100()
Dim mysum As Long, i As Integer
For i = 1 To 100 Step 1
mysum = mysum + i
Debug.Print I ‘ 这个语句的作用是将I的传递输入到立即窗口
Next i
MsgBox "1到100的自然数和是:" & mysum
End Sub
实例4.
Sub 等级for()
Dim dj As String, i As Integer
For i = 14 To 157 Step 1
Select Case Cells(i, "D").Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
Cells(i, "E").Value = dj
Next i
End Sub
l For Each —Next 循环语句
For each 元素变量 In 对象集合
语句块
[Exit for]
语句块
Next [元素变量]
实例5. Sub 等级each()
Dim dj As String, rng As Range
For Each rng In Range("d14:d143")
Select Case rng.Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
rng.Offset(0, 1).Value = dj
Next rng
End Sub
实例6. Sub ll()
Dim dj As String, i As Integer
For i = 14 To 143
Select Case Cells(i, "D").Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
Cells(i, "E").Value = dj
Next i
End sub
l Do [while]循环语句
1.开头判断循环条件
Do [while循环条件]
循环体
[exit do]
循环体
Loop
2.结尾循环判断条件
Do
循环体
[eixt do]
循环体
Loop [while循环条件]
l 1. 开头判断循环体 2.结尾判断循环体
DO UNTIL循环语句 DO
DO [until循环条件] 循环体
循环体 [Exit do]
[Exit do] 循环体
循环体 loop [until循环语句]
LOOP
Sub 等级do()
Dim dj As String, i As Integer
i = 3
Do While Cells(i, "D") <> ""
Select Case Cells(i, "D").Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
Cells(i, "E").Value = dj
i = i + 1
Loop ' 返回语句
End Sub