2015年02月08日 11:43:15

VBA基本语法整理

作者: 

最近为了一个调货程序,边学边用,终于是写出来了一个Excel VBA程序,其中学会了不少使用方法,借此整理出来,希望能够给后来的新人有所帮助。

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. Set Rng = ThisWorkbook.Sheets(1).Range(colStyleColor & firstRow & ":" & colStyleColor & lastRow).Find(styleColor, after:=Range(colStyleColor & rowNum))
  9. If Not Rng Is Nothing Then
  10. rowNum = Rng.Row
  11. End If
  12. ' 如果搜索回到第一个,退出函数 '
  13. If firstMatchRow = rowNum Then
  14. rowNum = fasle
  15. End If
  16. Wend
  17. 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. For Each key In dic
  8. val = dic.Item(key)
  9. Next
  10. ' 移除一个内容 '
  11. dic.Remove(key)
  12. ' 移除全部内容 '
  13. 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"



未经同意禁止转载!
转载请附带本文原文地址:VBA基本语法整理,首发自 Zjmainstay学习笔记
阅读( 10082 )
看完顺手点个赞呗:
(24 votes)

1.PHP cURL群:PHP cURL高级技术
2.正则表达式群:专精正则表达式
3. QQ联系(加请说明):QQ联系博主(951086941)
4. 邮箱:zjmainstay@163.com
5. 打赏博主:

  1. 模拟登录后数据采集
  2. 网页内容数据采集
  3. 采集内容正则解析
  4. 数据采集难题咨询

阿里云幸运券分享
网站总访问量: