杨希胭 图片:第四讲 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过程的代码。

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

End Sub 

技巧:点击“工具”——宏——选择“mysub,这是就会调出第一个sub过程语句。

l  在过程名称以及参数前使用Call 过程名[(参数1,参数2]

例如:Sub text()

Call mysub

End Sub

l  利用Application对象的run方法


ApplicationRun表示过程名的字符串(或字符串变量)[,参数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.       循环语句:就是循环执行一段语句。

IF语句

IF 逻辑表达式  Then

语句块1

[Else 语句块2]

End  If

                       实例1. 如图所示                  

 

代码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 出题 '调用过程,重新生成题目

End Sub         技巧:  注释代码方法:选择需要注释的代码区域,单击“视图”——工具栏——编辑——“设置注释块”按钮。 

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

Select case 语句

If  语句一般是可以嵌套的,他只有二元判断。如果需要在三种或更多判断语句上,一般使用select  case 语句。

Select case 语句测试表达试

Case 表达式列表1

语句块1

Case 表达式列表2

语句块2

Case 表达式列表3

语句块3

………..

Case 表达式列表n

语句块n

Case Else

语句块  n+1

End select

1.      测试表达式必须为数值表达式或字符串表达式,

2.      表达式列表可以是用逗号隔开的表达式,也可以使用 TO IS 关键字。如:

Case1234

Case 1 to 4

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

实例3.如图所示

代码: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

FOR 循环语句

For next  循环语句

For  循环变量 = 初值  To 终值 [ spet 步长]

循环体

[Exit  For]

循环体

Next 循环变量实例3.计算1 100的自然数和。

代码: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 "1100的自然数和是:" & mysum

End Sub

注释:第一次循环的时候,循环变量的值等于初值,在这个过程里就是1。循环变量等于循环变量+步长,这里就是1+1=2,一次循环到终值100.

实例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

 

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

Do [while]循环语句

1.开头判断循环条件

Do [while循环条件]

循环体

[exit  do]

循环体

Loop

2.结尾循环判断条件

Do

循环体

[eixt do]

循环体

Loop [while循环条件]

第二种比第一众多执行一次循环。

1. 开头判断循环体          2.结尾判断循环体

  DO UNTIL循环语句          DO

DO [until循环条件]            循环体

循环体                      [Exit do]

[Exit do]                      循环体

循环体                     loop [until循环语句]

LOOP

直接循环条件为真时退出循环,这是DO UNTIL do while  的区别。

实例7. 如图所示 

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

                                                                                                                                         全部结束