access循环语句
(6)While…Wend循环语句
While…Wend循环与Do While…Loop结构 类似,但不能在While…Wend循环中使用 Exit Do语句。 While…Wend循环语句格式为: While条件表达式 <语句块> Wend
过程调用
函数调用 函数名称(参数表) 例题计算圆面积,使用函数调用方法 过程调用 Call 过程名称(参数表) 参数传递 ByVal传值方式,单向 ByRef传址方式,双向 举例子说明!
【例6】在立即窗口中显示有(*)组成的5*5的正方形。 Sub Procedure5( ) '输出5*5的正方形 Const MAX=5 '定义常量 Dim Str As String Str="" For n=1 to Max Str=Str+"*" Next n For n=1 to Max Debug.print Str Next n End Sub
又例如: Dim strx as string *1 Select Case strx Case "A" to "Z", "a" to "z" stry="英文字母" Case "!","?",",",".",";" stry="标点符号" Case Is<68 stry="字符的ASCII码值小于68" Case Else stry="其他字符" End Select
【例9】创建有参子过程Test(),通过主调过程Main_click( )被 调用,观察实参值的变化。 被调子过程Test( ): Public Sub Test(ByRef x As Integer) '形参x说明为传址形式 的整型量 x=x+10 '改变形参x的值 End Sub 主调过程Main_click( ): Private Sub Main_click( ) Dim n As Integer '定义整型变量n n=6 '变量n赋初值6 Call Test(n) MsgBox n '显示n值 End Sub
【例3】把26个小写英文字母赋给数组strx。 Dim strx(1 to 26) As String I=1 Do While I<=26 strx(I)=Chr(I+96) I=I+1 Debug.print strx(i) Loop
5)For…Next循环语句
主要用于循环次数已知的循环操作。语句格式为: For 循环变量=初值 To 终值 [step 步长值] <语句块> [Exit For] <语句块> Next 循环变量 功能: 循环变量先被赋初值。判断循环变量是否在终值内,如果是, 执行循环体,然后循环变量加步长值继续;如果否,结束 循环,执行Next后的语句。 说明:循环变量必须为数值型。 step步长值:可选参数。如果没有指定,则step的步长值默认 为1。注意:步长值可以是任意的正数或负数。一般为正数, 初值应小于等于终值;若为负数,初值应大于等于终值; 步长值不能为0,否则造成“死循环”。
9.5.2 参数传递
在VBA中,实参向形参的数据传递有两种方式,即传值(ByVal选项)和 传址(ByRef选项),传址调用是系统默认方式。区分两种方式的标志 是:要使用传值的形参,在定义时前面加有“ByVal”关键字,有 “ByVal”关键字,为传值方式,否则为传址方式。 (1)传值调用的处理方式是:当调用一个过程时,系统将相应位置实参 的值复制给对应的形参,在被调过程处理中,实参和形参没有关系。 被调过程的操作处理是在形参的存储单元中进行,形参由于操作处理 引起的任何变化均不反馈、影响实参的值。当过程调用结束时,形参 所占用的内存单元被释放,因此,传值调用方式具有单向性。 (2)传址调用的处理方式是:当调用一个过程时,系统将相应位置实参 的地址传递给对应的形参。因此,在被调过程处理中,对形参的任何 操作处理都变成了对相应实参的操作,实参的值将会随被调过程对形 参的改变而改变,传址调用方式具有双向性。
If语句的嵌套使用:
指If或Else后面的语句块中又包含有If语句。 语句格式为: If <条件表达式1> Then <语句块1> If <条件表达式11> Then <语句块11> End If End If
【例1】比较3个数值变量x、y和z的值,通过交换,使得 x>y>z。 程序语句如下: If x<y Then t=x: x=y: y=t '如果x<y,x与y交换,使得x>y If y<z Then t=y: y=z: z=t '如果y<z,y与z交换,使得y>z If x<y Then t=x: x=y: y=t '此时的x,y值已不是原先的值 End If End If End If 注意:套If语句应注意书写格式,为提高程序的可读性,多 采用锯齿型。注意If与End If的配对。多个If嵌套,End If与它 最近的If配对。
(3)Do…Loop While循环语句 语法格式为: Do <语句块> [Exit Do] <语句块> Loop While 条件表达式 说明: 关键字While用于指明当条件为真(True)时, 执行循环体中的语句。
(4)Do…Loop Until循环语句 语法格式为: Do <语句块> [Exit Do] <语句块> Loop Until 条件表达式 说明: 关键字Until用于指明当条件为真(True)前执行 循环体中的语句。
【例2】判定学生总评成绩: Select Case Val(me!Zpcj) Case is>=90 me!Zpjg="优秀" Case 80,81,82 to 89 me!Zpjg="良好" Case 70 to 79 me!Zpjg="中等" Case 60 to 69 me!Zpjg="及格" Case Else me!Zpjg="不及格" End Select
循环语句
(1)Do While…Loop循环语句 语法格式为: Do While 条件表达式 <语句块> [Exit Do] <语句块> Loop 功能: Do While循环语句:当条件表达式结果为真时,执行 循环体,直到条件表达式结果为假或执行到Exit Do语句而退出循环体。
(2)Do Until…Loop循环语句 语法格式为: Do Until 条件表达式 <语句块> [Exit Do] <语句块> Loop Do Until循环语句:当条件表达式结果为假时, 执行循环体,直到条件表达式结果为真或 执行到Exit Do语句而退出循环体。
当主调过程Main_click( )调用子过程Test( )后, “MsgBox n”语句显示n的值已经发生了变化,其 值变为16,说明通过传址调用改变了实参n的值。 如果将主调过程Main_click( )中的调用语句“Call Test(n)”换成“Call Test(n+1)”,再运行主调过程 Main_click( ),结果会显示n的值依旧是6。表明 常量或表达式在参数的传址调用过程中,双向作 用无效,不能改变实参的值。 在上例中,需要操作实参的值,使用的是系统默认 的传址调用方式,若使用传值调用方式,请读者 分析处理结果的变化。
【例7】在窗体对象中,使用函数过程实现任意半径的圆面积计算,当输 入圆半径值时,计算并显示圆面积。 在窗体中添加以下控件: 创建两个标签控件,其标题分别设为:半径和圆面积。 创建两个文本框控件,其名字分别设为:SinR和SinS 创建一个命令按钮,其标题设为“计算”,在其Click事件过程中,加入 如下代码语句: Private Sub command1_Click( ) me!SinS=Area(me!SinR) End Sub 在窗体模块中,建立求解圆面积的函数过程Area()。代码如下: Public Function Area(R As Single) As Single IF R<=0 Then Msgbox "圆半径必须为正数值!",vbCritical, "警告" Area=0 Exit Function End If Area=3.14*R*R End Function 运行结果:当在半径文本框中输入数值数据时,单击【计算】按钮,将 在圆面积文本框中显示计算的圆面积值。
子过程的调用有两种方法,语句格式为:
Call 子过程名 [(实参列表)] 子过程名 [实参列表]
说明: 用Call关键字调用子过程时,若有实参,则 必须把实参用圆括号括起,无实参时可省 略圆括号;不使用Call关键字,若有实参, 也不用圆括号括起。
【例8】在窗体对象中,使用子过程实现数据的排序操作,当输入两个数值时,从大到小排列并显示结果。 在窗体中添加以下控件: 创建两个标签控件,其标题分别设为:x值和y值。 创建两个文本框控件,其名字分别设为:Sinx和Siny 创建一个命令按钮,其标题设为“排序”,在其Click事件过程中,加入如下代码语句: Private Sub command1_Click( ) Dim a,b If Val(me!Sinx)>Val(me!Siny) Then Msgbox "x值大于y值,不需要排序",vbinformation, "提示" Me!Sinx.SetFocus Else a= Me!Sinx b= Me!Siny Swap a,b Me!Sinx = a Me!Siny = b Me!Sinx.SetFocus End If End Sub 在窗体模块中,建立完成排序功能的子过程Swap。代码如下: Public Sub Swap(x,y) Dim t t=x x=y y=t End Sub 运行窗体,可实现输入数据的排序。 在上面的例子中,Swap(x,y)子过程定义了两个形参x和y,主要任务是:从主调程序获得初值,又将结果返 回给主调程序,而子过程名Swap是无值的。