- 数据类型
- 变量和作用域
(1)VBA允许使用未定义的变量,默认是变体变量
(2)在模块通用说明部分,加入Option Explicit语句可以强迫用户进行变量定义
(3)变量定义语句及变量作用域
一般变量作用域的原则是,那部分定义就在那部分起作用,模块中定义则在该模块那作用。
-
数组
- 数组必须用Global或Dim语句来定义:
- 除了以上固定数组外,VBA 还有一种功能强大的动态数组,定义时无大小维数声明;在程序中再利用Redim语句来重新改变数组大小,原来数组内容可以通过加preserve关键字来保留。
如下例:
Dim array1() as double : Redim array1(5) : array1(3)=250 : Redim preserve array1(5,10)
-
对对象的赋值采用:set myobject=object 或 myobject:=object
-
以单引号或者Rem开头的行是注释。
-
书写规范
- (1)VBA不区分标识符的字母大小写,一律认为是小写字母;
- (2)一行可以书写多条语句,各语句之间以冒号 : 分开;
- (3)一条语句可以多行书写,以空格加下划线 _ 来标识下行为续行
-
条件判断语句
If condition Then [statements][Else elsestatements]
-
If condition Then [statements] [ElseIf condition-n Then [elseifstatements] ... [Else [elsestatements]] End If
-
Select Case Pid Case “A101” Price=200 Case “A102” Price=300 …… Case Else Price=900 End Case
- Choose 函数???
- Switch函数???
-
For counter = start To end [Step step] 'step 缺省值为1 [statements] [Exit For] [statements] Next [counter]
-
For Each element In group Statements [Exit for] Statements Next [element]
-
With object [statements] End With
-
Do {while |until} condition' while 为当型循环,until为直到型循环,顾名思义,不多说啦 Statements Exit do Statements Loop 或者使用下面语法: Do ' 先do 再判断,即不论如何先干一次再说 Statements Exit do Statements Loop {while |until} condition
-
错误处理语句
二.错误语句处理
执行阶段有时会有错误的情况发生,利用OnError语句来处理错误,启动一个错误的处理程序。
语法如下:
On Error Goto Line ‘当错误发生时,会立刻转移到line行去
On Error Resume Next ‘当错误发生时,会立刻转移到发生错误的下一行去
On Erro Goto 0 ‘当错误发生时,会立刻停止过程中任何错误处理过程
-
过程和函数
- VBA具有四种过程:Sub 过程、Function函数、Property属性过程和Event事件过程。
-
两种传值方式ByVal和ByRef
-
调用过程需要在被调用过程的前面加上call
-
函数调用,调用方法不确定。
-
vab有大量内置函数
-
添加控件时,同时按下alt会自动适应单元格大小。
-
F5快速运行过程或程序。
-
Dim array_name(n) As type (其中n是数组元素的个数)
例如,如果要创建保存10个学生名字的数组,可以用以下语句:
Dim s学生名字(9) As Integer
注意,括号中的数字是9而不是10.这是因为在默认的情况下,第一个索引数字是0. -
动态数组
Dim dyn_array() As type
对数组声明后可以在程序运行时用:ReDim语句指定数组的大小:
ReDim dyn_array()(array_size)
参数array_size代表数组的新大小。如果要保留数组的数值,请在ReDim语句后使用保留字Preserve,具体语法如下:
ReDim Preserve dyn_array(array_size)
-
设置权限
- 通过控制excel某个工作表将要被激活的时候,进行相关的判断,拒绝其打开。
-
提高vba程序运行效率的方法:
- 尽量使用VBA原有的属性、方法和Worksheet函数
- 尽量减少使用对象引用,尤其在循环中
- 减少对象的激活和选择
- 关闭屏幕更新
-
可以写定时程序,目前用不到