最近工作中学到了很多东西,目前用得最多是的VB 2008,但是这个以后有空慢慢写东西总结归纳。这里先发一帖记录下Excel VBA中最重要最常用的一些概念和语句,都是前段时间刚刚学了就用的。
- 常用对象、Application、Workbook、Worksheet、Range
几个基本对象的层次概念:Application -> Workbook -> Worksheet -> Range,各指什么就不多废话了。Workbook和Worksheet的实例可以用Activate方法激活,然后即可在下级对象的引用中省略掉当前对象。如:
- Range对象
Range是Excel VBA中用得最多的对象。它可以是一个或者一片单元格,可以接受读取 、赋值、复制、剪切和粘贴等操作。得到Range对象的方法有N种,最常用的是用Range和Cells:
用Range选择多个单元格:
用Range选择整行或整列:
用Range选择多块单元格区域:
以及用Columns和Rows选择多行或多列:
- Select方法、Selection对象
得到一个Range后用Select方法将之选定,即可对Selection对象进行复制、剪切等操作,如:
要注意的是Paste方法作用在表单对象(Worksheet)上。
- Text属性和Value属性
Range对象的Text属性和Value属性都返回单元格的内容,但是用法不同。前者是一个只读属性,返回的是格式化后的值,只能用来获取单元格内容。后者是读写属性,用到的是原始的值,可以用来设置单元格的内容。如:
- 删除方法、Clear、Delete
删除单元格可以使用Clear方法,注意这样会将选中单元格的内容和格式一并清除掉。ClearContents方法只清除内容,ClearFormats方法只清除格式。Delete方法的不同之处在于,被删除单元格的下面或右边的所有单元格会顺延上来以补齐被删掉的空白处。
- Offset方法
以当前Range对象为原点,通过两个整数值作为相对位移得到新的Range:
得到的也就是"D3"单元格。
- 选中从当前单元格到行末/列末的所有单元格
用VB提供的预定义常数来得到:
对应的其它方向的常数分别是xlUp、xlToLeft、xlToRight。
- 调用Excel预定义函数:
- 传无限参数:
使用ParamArray关键字来定义个数为无限的参数表项:
- 返回数组的函数:
用Array关键字来定义函数的返回值:
- Error、错误处理机制
VBA的错误处理机制基本是以Goto语句和标号为基础实现的,典型应用:
值得注意的是在错误处理代码之前一定要有退出子程序的语言,以保证错误处理代码在正常情况下不会被执行。如果用Goto 0则表示使前面所作的错误处理规则无效,即恢复默认状态。另外
也是常见的一种用法,即忽略错误,从出错的地方下一行开始继续执行。
- 错误代码、手动抛出错误
VBA在运行时用一个默认的对象Err来保存错误信息,可以用Err.Number来得到错误代码以采取相应措施。要手动抛出一个71号错误,可以用下列两种用法之一:
另外可以用
来抛出与上一次相同代码的错误。
- SendKeys、模拟键盘输入
SendKeys确切来说更像是命令而不是语句,用来给当前获得焦点的程序传送虚拟的键盘输入。具体的用法太多,这里就不详细说了,简单记一下组合键的用法:+表示Shift,^表示Ctrl,%表示Alt。另外有两个经常和SendKeys一起用到的命令,分别是Shell和AppActivate。
- 提高VBA程序执行速度
这是书里归纳的,先照搬过来:
- 尽量把变量声明成具体类型而不是Variant;
- 用Set定义经常使用的对象而不要每次都用一长串引用;
- 多用With...End With结构;
- 计算公式多且复杂的情况下将表单设置为手动计算;
- 关闭画面自动更新:Application.ScreenUpdating = False; 关闭警号:Application.DisplayAlert = Flase。
暂时先写这么多,有空再加。