VBA基本语法整理

1. VBA 局部变量和全局变量

  1.  
    1. 局部变量
  2.  
    Sub或者Function结构中定义的变量
  3.  
    通常使用Dim关键词来声明,但是可以不声明使用(不报错)
  4.  
    2. 全局变量
  5.  
    Sub或者Function外部(尽量在整个代码顶部),使用Public关键词定义
  6.  
    Public name '普通全局变量
  7.  
    Public styleDic As Object '字典全局变量

2. VBA 变量赋值

  1.  
    普通变量,直接用:
  2.  
    name = "Zjmainstay"
  3.  
    赋值即可。
  4.  
     
  5.  
    定义一个字典变量:
  6.  
    Dim styleDic As Object
  7.  
    Set styleDic = CreateObject("Scripting.Dictionary")

3. VBA 选中一个Sheet

ThisWorkbook.Sheets(2).Select ’2表示第2个Sheet,下标从1开始

4. VBA 获取单元格内容

  1.  
    val = ThisWorkbook.Sheets(1).Cells(rowNum, colNum)
  2.  
    或:
  3.  
    val = ThisWorkbook.Sheets(7).Range("A" & rowNum)
  4.  
    colNum是数值,A与colNum对应英文字母,A对应1,B对应2,以此类推

5. VBA 获取单元格行号和列号

  1.  
    colNum = ThisWorkbook.Sheets(1).Range("A1").Column
  2.  
    rowNum = ThisWorkbook.Sheets(1).Range("A1").Row
  3.  
    注:使用Cells获取也可以

6. VBA 单元格赋值

  1.  
    ThisWorkbook.Sheets(1).Cells(rowNum, colNum) = val
  2.  
  3.  
    ThisWorkbook.Sheets(7).Range("A" & rowNum) = val

7. VBA Range获取单元区间

 
  1. For Each cellVal In ThisWorkbook.Sheets(1).Range(startColName & rowNum & ":" & endColName & rowNum)
  2. 'cellVal即单元格的内容
  3. 'cellVal.Column 列号
  4. 'cellVal.Row 行号
  5. Next

8. VBA 使用Find搜索单元格内容

在使用Find的时候经常会遇到两个问题: 
1. VBA Find搜索失败,抛出异常 
使用VBA中Find搜索内容,当搜索失败时,会抛出异常导致程序无法正常处理 
解决方法如下,使用Rng存储,然后用If Not Rng Is Nothing Then判断。

 
  1. Set Rng = ThisWorkbook.Sheets(1).Range(colName & firstRow & ":" & colName & lastRow).Find(styleColor)
  2. If Not Rng Is Nothing Then
  3. ’可以找到(这里处理)
  4. End If
  1. Find循环破除 
    使用VBA中Find搜索内容,会出现循环搜索的问题,此时,可以使用判断是否回到第一次作为判断,断开循环。
 
  1. Set Rng = ThisWorkbook.Sheets(1).Range(colName & firstRow & ":" & colName & lastRow).Find(styleColor)
  2. If Not Rng Is Nothing Then
  3. rowNum = Rng.Row
  4. firstMatchRow = rowNum
  5. While rowNum
  6.  
  7. ' 这里写处理逻辑
  8.  
  9. ' 继续搜索单店指定店铺
  10. Set Rng = ThisWorkbook.Sheets(1).Range(colStyleColor & firstRow & ":" & colStyleColor & lastRow).Find(styleColor, after:=Range(colStyleColor & rowNum))
  11. If Not Rng Is Nothing Then
  12. rowNum = Rng.Row
  13. End If
  14.  
  15. ' 如果搜索回到第一个,退出函数 '
  16. If firstMatchRow = rowNum Then
  17. rowNum = fasle
  18. End If
  19. Wend
  20. End If

9. VBA While循环退出循环

 
  1. While i < 100
  2. '这里处理逻辑 '
  3. If i = 20 Then
  4. i = 100 '利用While的破坏条件退出循环 '
  5. End if
  6. Wend

10. VBA 字典类型使用

 
  1. Dim dic As Object
  2. Set dic = CreateObject("Scripting.Dictionary")
  3. If dic.exists(key) = False Then
  4. dic.Add key, val
  5. End If
  6.  
  7. ' 循环读取字典内容 '
  8. For Each key In dic
  9. val = dic.Item(key)
  10. Next
  11.  
  12. ' 移除一个内容 '
  13. dic.Remove(key)
  14.  
  15. ' 移除全部内容 '
  16. dic.RemoveAll

11. VBA For 循环

 
  1. For i = 1 To 10
  2. MsgBox i
  3. Next i

12. VBA 获取最大行号

maxRow = ThisWorkbook.Sheets(1).Range("a65536").End(xlUp).Row

13. VBA If ElseIf

 
  1. Name = "vba"
  2. If Name = "vba" Then
  3. MsgBox "Yes"
  4. ElseIf Name = "xxx" Then
  5. MsgBox "No"
  6. Else
  7. MsgBox "X"
  8. End If

14. VBA 函数定义

 
  1. ' 1~num求和 '
  2. Function getSum(num)
  3. Sum = 0
  4. For i = 1 To num
  5. Sum = Sum + i
  6. Next i
  7. ' 返回值为函数同名变量赋值 '
  8. getSum = Sum
  9. End Function

15. VBA 函数返回值

VBA中的字典无法作为返回值,此时需要借助全局变量传递返回值

 
  1. Public tmpDic As Object
  2. Function test()
  3. Set tmpDic = CreateObject("Scripting.Dictionary")
  4. tmpDic.Add "a", 5
  5. End Function

16. VBA 退出Sub或Function

使用exit subexit function即可

17. VBA 注释

VBA使用单引号作为注释

18. 复制Sheet

  1.  
    ThisWorkbook.Sheets(1).Copy after:=Worksheets(Worksheets.Count)
  2.  
    ActiveSheet.Name = "Sheet1备份"

19. 添加Sheet

Worksheets.Add().Name = "Sheet xxx"

posted @ 2023-04-15 21:48  快乐58  阅读(173)  评论(0)    收藏  举报