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