1.代码的基本结构

1.1 代码的基本结构

  1. [Private|Public|Friend][static] Sub name[(arglist)]
  2. [statements]
  3. [exit Sub]
  4. [statements]
  5. End Sub
  1. Sub name()
  2. pass
  3. End Sub

1.2 代码的执行流程

  1. VBA代码一般自上而下自左而右执行;
  2. 若遇到循环,先循环内层,内层全部循环完毕开始继续外层的循环;
  3. GOTO语句可以跳转任意位置

    1.3 代码的其他注意事项

  4. 代码的注释

vba中代码注释一般为两种,可用'Rem+空格(仅用于每行开头)

  1. ' 这是一个注释
  2. Rem 这也是一个注释
  1. 代码的换行

space+_可以实现代码的换行。关键字中间是不能换行的

  1. Sub 1()
  2. Workbooks("测试").Worksheets("Sheet1").Range("A1") = "Hello World"
  3. Workbooks("测试").Worksheets("Sheet1"). _
  4. Range("A2") = "Hello World"
  5. End Sub
  1. 两行代码并做一行

:将两行代码并做一行

  1. Sub 1()
  2. [A1] = "Hello World"
  3. [A2] = "Hello World"
  4. End Sub
  5. Sub 2()
  6. [A1] = "Hello World" : [A2] = "Hello World"
  7. End Sub

2.条件语句

2.1 IF条件语句

  1. 简单的IF条件语句:if...then...end if,如果ifthen在同一行中,则不需要end if语句
  2. 复杂的IF条件语句:if...then...else...end if
  3. 多条件的IF语句:if...then...elseif...elseif...else...end if

    一般情况都建议写成块形式,方便后期调试;

  1. Public Sub 1()
  2. If [A1] > 60 Then MsgBox "及格"
  3. End Sub
  1. Public Sub 1()
  2. If [A1] > 60 Then MsgBox "及格" Else MsgBox "不及格"
  3. End Sub
  4. Public Sub 2()
  5. If [A1] > 60 Then
  6. MsgBox "及格"
  7. Else
  8. MsgBox "不及格"
  9. End If
  10. End Sub
  1. Public Sub 2()
  2. If [A1] < 60 Then
  3. MsgBox "不及格"
  4. ElseIf [A1] < 80 Then
  5. MsgBox "良好"
  6. ElseIf [A1] <= 100 Then
  7. MsgBox "优秀"
  8. End If
  9. End Sub

2.2 select…case条件语句

一般用于匹配较多条件

  1. Select Case [testexpression]
  2. Case [expression]
  3. [statements]
  4. Case [expression]
  5. [statements]
  6. Case [expression]
  7. [statements]
  8. End Select
  1. 总之在case的[expression]中不能够再出现[testexpression]的内容,而是需要出现[testexpression]的条件;
  2. 如果有Case出现,则为必要参数。To关键字可用来指定一个数值范围。如果使用To关键字,则较小的数值要出现在 To之前。使用Is关键字时,则可以配合比较运算符(除Is和Like之外)来指定一个数值范围。如果没有提供,则Is关键字会被自动插入;
  3. case中可以出现多个数值、文本及区间组合,如**case 1,2,3,4,6,7** **case "a","b","c"** **case 1 to 10,34 to 55**
  1. Public Sub 2()
  2. Select Case [A1]
  3. Case Is < 60
  4. MsgBox "不及格"
  5. Case Is < 80
  6. MsgBox "及格"
  7. Case Is <= 100
  8. MsgBox "及格"
  9. End Select
  10. End Sub

2.3 多条件判断表达式

and or not

3.循环语句

vba中的循环语句主要为for循环和do...loop循环

3.1 for循环

  1. 用于循环数字的for…next循环

    1. For i = start_num To end_num [Step stepcount] 'step默认为1
    2. [statement]
    3. [Exit For]
    4. [statement]
    5. Next

    ```vbnet Public Sub 宏1()

    Dim i, j

    For i = 1 To 100

    1. j = j + i

    Next

    Debug.Print j

End Sub

  1. 2. **用于循环对象集合的for each循环**
  2. > 1. for each对二维区域的单元格遍历是先横向走再纵向走;
  3. > 2. for each一般用于遍历**字典、单元格和集合元素**,一般不用于遍历数组;
  4. > 3. 数组的遍历一般用下标循环;
  5. ```vbnet
  6. Public Sub 宏1()
  7. Dim wht As Worksheet
  8. Dim i
  9. i = 1
  10. For Each wht In Worksheets
  11. Cells(1, i) = wht.Name
  12. i = i + 1
  13. Next
  14. End Sub

3.2 do…loop循环

  1. 一般do…loop循环

一般的do…loop循环需要内部嵌套if条件,否则会形成无法停止的死循环

  1. Sub sum_100()
  2. dim i, j
  3. i = 1
  4. j = 0
  5. do
  6. if i <101 then
  7. j = j + i
  8. i = i + 1
  9. else
  10. exit do '此处必须设置跳出do循环的条件
  11. end if
  12. loop
  13. debug.print j
  14. End Sub
  1. do while…loop循环

当while后面的条件满足时进入循环,当条件不满足时跳出循环

  1. Public Sub sum_100_2()
  2. Dim i, j
  3. i = 1
  4. Do While i <= 100
  5. j = j + i
  6. i = i + 1
  7. Loop
  8. Debug.Print j
  9. End Sub
  1. do until…loop循环

当until后面的条件不满足时进入循环,当条件满足时跳出循环

  1. Public Sub sum_100_3()
  2. Dim i, j
  3. i = 1
  4. Do Until i > 100
  5. j = j + i
  6. i = i + 1
  7. Loop
  8. Debug.Print j
  9. End Sub
  1. do…while loop循环

当while后面的条件满足时再次进入循环,当条件不满足时直接跳出循环。判断条件后置

  1. Public Sub sum_100_4()
  2. Dim i, j
  3. i = 1
  4. Do
  5. j = j + i
  6. i = i + 1
  7. Loop While i < 101
  8. Debug.Print j
  9. End Sub
  1. do…until loop循环

当until后面的条件不满足时再次进入循环,当条件满足时直接跳出循环。判断条件后置

  1. Public Sub sum_100_5()
  2. Dim i, j
  3. i = 1
  4. Do
  5. j = j + i
  6. i = i + 1
  7. Loop Until i > 100
  8. Debug.Print j
  9. End Sub

4.特殊语句

4.1 with语句

with语句的本质是一个简写语句

  1. '宏1代码与宏2等价
  2. Public Sub 宏1()
  3. with worksheets("1月")
  4. .range("a1") = 12
  5. .range("a2") = 13
  6. .range("a3") = 14
  7. .range("a4") = 15
  8. .range("a5") = 16
  9. .range("a6") = 17
  10. End with
  11. End Sub
  12. Public Sub 宏2()
  13. worksheets("1月").range("a1") = 12
  14. worksheets("1月").range("a2") = 13
  15. worksheets("1月").range("a3") = 14
  16. worksheets("1月").range("a4") = 15
  17. worksheets("1月").range("a5") = 16
  18. worksheets("1月").range("a6") = 17
  19. End Sub

4.2 过程中断语句

过程中断语句一般有四个:Exit For/IfExit SubEndStop

  1. Exit For/If/do:一般用于跳出所在层的循环或条件判断,继续执行上一层的循环;
  2. Exit Sub:用于在非代码最后结束整个过程;
  3. End:结束一切,释放内存;
  4. Stop:暂停过程的执行,相当于断点;

    4.3 跳转语句

  5. On Error GoTo line...line: ```vbnet ‘判断单元格是否有数据有效性

Sub Validation()

On Error GoTo line

If Range(“A12”).Validation.Type >= 0 Then MsgBox “单元格有数据有效性!” Exit Sub End If

line: MsgBox “单元格没有数据有效性!”

End Sub ```

  1. On Error Resume Next忽略错误