zoukankan      html  css  js  c++  java
  • VBA基础

    概要

    编程语言的基础除了数据类型, 就是控制结构了. 所谓控制结构, 主要就是分支和循环.

    分支

    废话不说, 直接示例代码:

    单条件判断

    1  Sub Test()
    2   If 2 > 1 Then
    3       Debug.Print "xxxx"
    4   End If
    5  End Sub
    

    执行后输出:

    xxxx
    

    多条件判断

    1. if-elseif-else 结构

       1  Option Explicit
       2  
       3  Sub Test()
       4      score 55
       5      score 65
       6      score 85
       7      score 95
       8  End Sub
       9  
      10  Function score(points As Integer)
      11  
      12      If points > 0 And points < 60 Then
      13          Debug.Print "不及格"
      14      ElseIf points > 80 And points < 90 Then
      15          Debug.Print "良好"
      16      ElseIf points >= 90 Then
      17          Debug.Print "优秀"
      18      Else
      19          Debug.Print "及格"
      20      End If
      21  
      22  End Function
      

      输出结果:

            不及格
            及格
            良好
            优秀
      
    2. select-case 结构

       1  Option Explicit
       2  
       3  Sub Test()
       4      score 55
       5      score 65
       6      score 85
       7      score 95
       8  End Sub
       9  
      10  Function score(points As Integer)
      11  
      12      Select Case points
      13          Case 90 To 100
      14              Debug.Print "优秀"
      15          Case 80 To 90
      16              Debug.Print "良好"
      17          Case 60 To 80
      18              Debug.Print "及格"
      19          Case 0 To 60
      20              Debug.Print "不及格"
      21      End Select
      22  
      23  End Function
      

      输出结果:

            不及格
            及格
            良好
            优秀
      

    异常处理

    其实异常处理, 也是一种条件判断, 只不过只将异常作为条件

     1  Option Explicit
     2  
     3  Sub Test()
     4      Dim x As Integer
     5  
     6      On Error GoTo finally
     7          x = 10 / 0
     8  
     9  finally:
    10      Debug.Print "发生错误"
    11  
    12  End Sub
    

    输出结果:

      发生错误
    

    循环

    for-next

     1  Option Explicit
     2  
     3  Sub Test()
     4      Dim n As Integer
     5  
     6      Debug.Print "打印 1 ~ 10 的奇数"
     7      For n = 1 To 10 Step 2
     8          Debug.Print n
     9      Next n
    10  
    11  End Sub
    

    执行结果:

    打印 1 ~ 10 的奇数
    1
    3
    5
    7
    9
    

    for-each-next

     1  Option Explicit
     2  
     3  Sub Test()
     4      Dim n As Variant
     5  
     6      Debug.Print "打印 1 ~ 10 的奇数"
     7      For Each n In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
     8          If Not n Mod 2 = 0 Then
     9              Debug.Print n
    10          End If
    11      Next
    12  
    13  End Sub
    

    执行结果:

    打印 1 ~ 10 的奇数
    1
    3
    5
    7
    9
    

    do-loop-until

     1  Option Explicit
     2  
     3  Sub Test()
     4      Dim n As Integer
     5  
     6      Debug.Print "打印 1 ~ 10 的奇数"
     7      Do
     8          n = n + 1
     9  
    10          If Not n Mod 2 = 0 Then
    11              Debug.Print n
    12          End If
    13      Loop Until n >= 10
    14  
    15      n = 0
    16  
    17      Debug.Print "打印 1 ~ 10 的奇数"
    18      Do Until n >= 10
    19          n = n + 1
    20  
    21          If Not n Mod 2 = 0 Then
    22              Debug.Print n
    23          End If
    24      Loop
    25  
    26  End Sub
    

    执行结果:

       打印 1 ~ 10 的奇数
       1
       3
       5
       7
       9
      打印 1 ~ 10 的奇数
       1
       3
       5
       7
       9
    

    上例中, until 的位置对循环的影响:

    1. until 在 Do 后面: 先进行判断, 再运行循环体
    2. until 在 Loop 后面: 先运行循环体, 再进行判断

    示例:

     1  Option Explicit
     2  
     3  Sub Test()
     4      Dim n As Integer
     5  
     6      n = 0
     7      Do
     8          Debug.Print "会运行"
     9      Loop Until n = 0
    10  
    11      n = 0
    12      Do Until n = 0
    13          Debug.Print "不会运行"
    14      Loop
    15  
    16  End Sub
    

    执行结果如下:

       会运行
    

    do-loop-while

     1  Option Explicit
     2  
     3  Sub Test()
     4      Dim n As Integer
     5  
     6      Debug.Print "打印 1 ~ 10 的奇数"
     7      Do
     8          n = n + 1
     9  
    10          If Not n Mod 2 = 0 Then
    11              Debug.Print n
    12          End If
    13      Loop While n < 10
    14  
    15      n = 0
    16  
    17      Debug.Print "打印 1 ~ 10 的奇数"
    18      Do While n < 10
    19          n = n + 1
    20  
    21          If Not n Mod 2 = 0 Then
    22              Debug.Print n
    23          End If
    24      Loop
    25  
    26  End Sub
    

    执行结果和 until 一样:

       打印 1 ~ 10 的奇数
       1
       3
       5
       7
       9
      打印 1 ~ 10 的奇数
       1
       3
       5
       7
       9
    

    while vs until:

    • while 是满足条件运行循环体
    • until 是满足条件退出循环体
  • 相关阅读:
    艾伟也谈项目管理,BUG平台应该是一个知识库 狼人:
    艾伟也谈项目管理,敏捷的坏态度 狼人:
    艾伟也谈项目管理,关于导致项目失败的程序的讨论 狼人:
    艾伟也谈项目管理,成功软件项目管理的奥秘 狼人:
    艾伟也谈项目管理,如何评估软件进度 狼人:
    艾伟也谈项目管理,敏捷个人:内容框架之执行力 狼人:
    艾伟也谈项目管理,项目管理 – 人员外购利弊谈(续) 狼人:
    艾伟也谈项目管理,ERP项目实施要未雨绸缪不要亡羊补牢 狼人:
    艾伟也谈项目管理,项目管理的十大挑战 狼人:
    艾伟也谈项目管理,项目过程中所遇到的各种问题记录——有关MSChart的一些小技巧 狼人:
  • 原文地址:https://www.cnblogs.com/wang_yb/p/11606585.html
Copyright © 2011-2022 走看看