搜索
查看: 2517|回复: 0

VBA基本语法整理

[复制链接]

978

主题

1094

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
15950
发表于 2018-12-20 09:05:41 | 显示全部楼层 |阅读模式

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"
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

表格智创网

网站简介:表格智创网,是一家以表格设计和技能分享的专业社区,由会计帮帮网投资建设,尽专业,助提高专业技能。

表格智创网欢迎您!

联系我们

  • 工作时间:早上9:00-16:00
  • 客服电话:18668755857
  • 本站网址:www.excelwps.com
  • 淘宝店址:kjbbw.taobao.com

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表