|
1. VBA 局部变量和全局变量
1. 局部变量
在Sub或者Function结构中定义的变量
通常使用Dim关键词来声明,但是可以不声明使用(不报错)
2. 全局变量
在Sub或者Function外部(尽量在整个代码顶部),使用Public关键词定义
Public name '普通全局变量
Public styleDic As Object '字典全局变量
2. VBA 变量赋值
普通变量,直接用:
name = "Zjmainstay"
赋值即可。
定义一个字典变量:
Dim styleDic As Object
Set styleDic = CreateObject("Scripting.Dictionary")
3. VBA 选中一个Sheet
ThisWorkbook.Sheets(2).Select ’2表示第2个Sheet,下标从1开始
4. VBA 获取单元格内容
val = ThisWorkbook.Sheets(1).Cells(rowNum, colNum)
或:
val = ThisWorkbook.Sheets(7).Range("A" & rowNum)
colNum是数值,A与colNum对应英文字母,A对应1,B对应2,以此类推
5. VBA 获取单元格行号和列号
colNum = ThisWorkbook.Sheets(1).Range("A1").Column
rowNum = ThisWorkbook.Sheets(1).Range("A1").Row
注:使用Cells获取也可以
6. VBA 单元格赋值
ThisWorkbook.Sheets(1).Cells(rowNum, colNum) = val
或
ThisWorkbook.Sheets(7).Range("A" & rowNum) = val
7. VBA Range获取单元区间
For Each cellVal In ThisWorkbook.Sheets(1).Range(startColName & rowNum & ":" & endColName & rowNum)
'cellVal即单元格的内容
'cellVal.Column 列号
'cellVal.Row 行号
Next
8. VBA 使用Find搜索单元格内容
在使用Find的时候经常会遇到两个问题:
1. VBA Find搜索失败,抛出异常
使用VBA中Find搜索内容,当搜索失败时,会抛出异常导致程序无法正常处理
解决方法如下,使用Rng存储,然后用If Not Rng Is Nothing Then判断。
Set Rng = ThisWorkbook.Sheets(1).Range(colName & firstRow & ":" & colName & lastRow).Find(styleColor)
If Not Rng Is Nothing Then
’可以找到(这里处理)
End If
Find循环破除
使用VBA中Find搜索内容,会出现循环搜索的问题,此时,可以使用判断是否回到第一次作为判断,断开循环。
Set Rng = ThisWorkbook.Sheets(1).Range(colName & firstRow & ":" & colName & lastRow).Find(styleColor)
If Not Rng Is Nothing Then
rowNum = Rng.Row
firstMatchRow = rowNum
While rowNum
' 这里写处理逻辑
' 继续搜索单店指定店铺
Set Rng = ThisWorkbook.Sheets(1).Range(colStyleColor & firstRow & ":" & colStyleColor & lastRow).Find(styleColor, after:=Range(colStyleColor & rowNum))
If Not Rng Is Nothing Then
rowNum = Rng.Row
End If
' 如果搜索回到第一个,退出函数 '
If firstMatchRow = rowNum Then
rowNum = fasle
End If
Wend
End If
9. VBA While循环退出循环
While i < 100
'这里处理逻辑 '
If i = 20 Then
i = 100 '利用While的破坏条件退出循环 '
End if
Wend
10. VBA 字典类型使用
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
If dic.exists(key) = False Then
dic.Add key, val
End If
' 循环读取字典内容 '
For Each key In dic
val = dic.Item(key)
Next
' 移除一个内容 '
dic.Remove(key)
' 移除全部内容 '
dic.RemoveAll
11. VBA For 循环
For i = 1 To 10
MsgBox i
Next i
12. VBA 获取最大行号
maxRow = ThisWorkbook.Sheets(1).Range("a65536").End(xlUp).Row
13. VBA If ElseIf
Name = "vba"
If Name = "vba" Then
MsgBox "Yes"
ElseIf Name = "xxx" Then
MsgBox "No"
Else
MsgBox "X"
End If
14. VBA 函数定义
' 1~num求和 '
Function getSum(num)
Sum = 0
For i = 1 To num
Sum = Sum + i
Next i
' 返回值为函数同名变量赋值 '
getSum = Sum
End Function
15. VBA 函数返回值
VBA中的字典无法作为返回值,此时需要借助全局变量传递返回值
Public tmpDic As Object
Function test()
Set tmpDic = CreateObject("Scripting.Dictionary")
tmpDic.Add "a", 5
End Function
16. VBA 退出Sub或Function
使用exit sub或exit function即可
17. VBA 注释
VBA使用单引号作为注释
18. 复制Sheet
ThisWorkbook.Sheets(1).Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "Sheet1备份"
19. 添加Sheet
Worksheets.Add().Name = "Sheet xxx" |
|