VBA基本语法整理

转自:http://www.zjmainstay.cn/vba-usage

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获取单元区间

 
  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

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

19. 添加Sheet

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

  • 35
    点赞
  • 301
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
很详细的VBA语法介绍: 一、VBA入门知识 。。。 二、了解对象、属性、方法和事件 1、了解对象、属性、方法和事件 2、Application 对象 3、Workbook 对象 4、Workbooks 属性 5、Range 对象 6、Range 属性 7、Cells 属性 。。。 三、VBA语法 (一)Visual Basic 的命名规则 1、写 Visual Basic 语句 2、写声明语句 3、Dim 语句的语法 4、Activate 方法的语法 5、Set 语句 3 6、MsgBox 函数的语法 7、选项语句的语法 8、AddressOf 运算符 9、了解变体 10、写赋值语句 11、写可执行的语句 12、Public 语句 13、Private 语句 14、使用数组 15、使用常数 16、AppActivate 语句 17、Beep 语句 19、Date 语句 20、Error 语句 21、Exit 语句 22、GoSub...Return 语句 23、GoTo 语句 24、Input # 语句 25、Let 语句 26、Load 语句 27、Name 语句 28、On...GoSub、On...GoTo 语句 29、Open 语句 30、Rem 语句 31、Stop 语句 32、Time 语句 33、While...Wend 语句 (二)逻辑语句 1、If...Then...Else 语句 2、使用 Select Case 语句 3、使用 For...Next 语句 4、For Each...Next 语句 5、 Do...Loop 语句 6、 With 语句 (三)过程 1、写 Sub 过程 2、写 Function 过程 3、写 Property 过程 四、 ActiveX 控件 1、AfterUpdate 事件 2、Click 事件 3、Click 事件、命令按钮控件、Accelerator 和 Caption 属性示例 4、DblClick 事件 5、Error 事件 6、KeyDown 和 KeyUp 事件 7、KeyPress 事件 8、KeyPress 事件示例 9、MouseDown 和 MouseUp 事件 10、MouseMove 事件 11、列表框控件 12、SpinDown 和 SpinUp 事件 13、SpinDown、SpinUp 事件和 Delay 属性示例 14、组合框控件 15、命令按钮控件 。。。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值