每一个过程完成一定的任务,所有的过程组合在一起形成程序;
代码可以放在模块(插入),也可以放在工作表对应区域;每个位置都可以放入多个过程或函数,(各工作簿的代码窗口在同一窗口中呈现,可通过工程窗口展开;)
过程查看:开发工具→宏→宏名列表;
VBA程序
VBA程序可以由一个或若干个过程组成,也就是说一个VBA过程可以单独作为一段程序,也可以作为一个大型VBA程序的子程序。
定义一个过程包含的元素:
1 过程声明:Sub...End Sub
2 过程名;
3 参数;
4 语句;
5 注释;
变量
- 变量是指在程序执行过程中随时可以改变其值的量,变量没有固定的值,可以随时根据需求赋予新值。所以变量通常用于代替一个未知数,我们在程序中对这个未知数进行操作,而不管这个未知数的值是什么,直到需要时才对未知数进行赋值或者获取该未知数的值。此外变量还有简化录入和提高效率的作用;
- 变量声明:Dim;
- 变量赋值:用符号:"=",对象变量用set和"="号;
- 变量是一个已经命名的存储位置,它包含了程序每个执行阶段所修改的数据。每一变量都有变量名,在其范围内可唯一识别。更通俗地说,变量就是在程序执行可中以随时变化的量。
- 变量和常量一样,也具有简化输入和方便识别两个优点,同时变量有一个常量不具备的优点:储存不确定的数据。特别在循环语句中,待处理的数值随时会变量变化,常量不足以满足需求,而只能借助常量。
- 静态变量在过程执行完毕后变量的值一直保存在内存中;而动态变量却在程序完成时归零或者返回空值。
- 变量名的最后一个字符可以是!#¥%,表示变量的类型;
Dim spr As String
Dim spr!
代码的存放位置和保存
- 工作表事件代码必须存放在对应的工作表的事件代码窗口中;
- 工作簿事件代码必须保存在ThisWorkbook代码窗口中;
- 类模块相应代码必须存放在类模块中;
- 前面三者以外的所有代码存放在标准模块中即可;
- 包含宏代码的格式采用xlsm后缀名;
- 单独保存代码模块:如bas模块文件,frm窗体文件,cls类模块文件;在代码窗口的资源管理器的文件名右击即可导出;
代码的调用方式
- 快捷键调用;
- 单击按钮执行:开发工具→插入→按钮(窗体控件)→右击→指定宏;
(以上两种方法调用过程仅对无参数且未隐藏的sub过程生效,对自定义函数以及有参数的sub过程无效,对通过Private声明为私有过程的sub过程也无效;)
- 自动执行:事件过程是VBA中一种特殊的过程,使用快捷键或按钮都无法调用事件过程。事件过程只有在符合事件所指定的条件时自动执行,它不需要人工干预,事件过程包括三项内容:
1 触发事件的对象;
2 触发事件的条件;
(以上两项由事件过程的参数和名称决定,也是VBA预告设置的;)
3 触发事件后执行的命令:由用户手工录入;
Private Sub Worksheet_SelectionChange(ByVal_Target As Range)
MsgBox Target(1).value
End Sub
(Target参数,Target代表当前选中的区域;Worksheet_SelectionChange表示在工作表中选择单元格时触发条件;)
- 在公式中调用:VBA还有一种Function过程,即自定义函数。此过程可以在VBA嵌套到Sub过程中,即用Sub过程调用Function过程,但是更多的是在单元格中当作公式来运用。
子过程
- 子过程标志以Sub开头,子过程之所以称为子过程是因为它可以被另一过程调用,调用子过程;
- 子过程的基本语法:
[Private|Public|Friend][Static] Sub name[(arglist)]
[statement]
[Exit Sub]
[statements]
End Sub
[Private|Public|Friend]:指定过程的作用域;
[Static]:指定过程是动态的还是静态的;
- 过程的递归和调用:
Sub 累加()
Range("a1")=Range("a1")+1;
Call 累加
End Sub
- 子过程的命名要求:
1 首字母不能是数字;
2 不能含有标点符号及空格;
3 不能使用系统内置的保留字;
4 同一个模块中不能与其他过程同名
5 长度不能超过255;
- 子过程的调用:受子过程的声明所限;
其它
- 事件代码:先是代码位置→对象列表:worksheet→过程列表:change;会自动产生工作表的Worksheet_change事件的程序外壳。
- 长代码换行:" _"(前面有空格);
- 注释代码:"'";