VBA常用技巧解析
#001 Sub RngSelect() #002 Sheet3.Activate
#003 Sheet3.Range(\:B10\#004 End Sub
代码解析:
RngSelect过程使用Select方法选定Sheet3中的A1:B10单元格区域,Select方法应用于Range对象时语法如下:
expression.Select(Replace)
参数expression是必需的,一个有效的对象。 参数Replace是可选的,要替换的对象。
使用Select方法选定单元格时,单元格所在的工作表必需为活动工作表,所以在第2行代码中先使用Activate方法使Sheet3成为活动工作表,否则Select方法有可能出错,显示如图 2-1所示的错误提示。
图 2-1 Select方法无效提示
2-2 使用Activate方法
还可以使用Activate方法选定单元格或单元格区域,如下面的代码所示。
#001 Sub RngActivate() #002 Sheet3.Activate
#003 Sheet3.Range(\#004 End Sub
代码解析:
RngActivate过程使用Activate方法选定Sheet3中的A1:B10单元格区域,Activate方法应用于Range对象时语法如下:
expression.Activate
使用Activate方法选定单元格时,单元格所在的工作表也必需为活动工作表,否则Activate方法有可能出错,显示如图 2-2所示的错误提示。
16
VBA常用技巧解析
图 2-2 Activate方法无效提示
2-3 使用Goto方法
使用Goto方法无需使单元格所在的工作表成为活动工作表,如下面的代码所示。
#001 Sub RngGoto()
#002 Application.Goto Reference:=Sheet3.Range(\:B10\#003 End Sub
代码解析:
RngGoto过程使用Goto方法选定Sheet3中的A1:B10单元格区域,并滚动工作表以显示该单元格。
Goto方法选定任意工作簿中的任意区域或任意Visual Basic过程,并且如果该工作簿未处于活动状态,就激活该工作簿,语法如下:
expression.Goto(Reference, Scroll)
参数expression是必需的,返回一个Application 对象。
参数Reference是可选的,Variant类型,指定目标。可以是Range对象、包含R1C1-样式记号的单元格引用的字符串或包含 Visual Basic 过程名的字符串。如果省略本参数,目标将是最近一次用Goto方法选定的区域。
参数Scroll是可选的,Variant类型,如果该值为True,则滚动窗口直至目标区域的左上角单元格出现在窗口的左上角。如果该值为False,则不滚动窗口。默认值为False。
技巧3 获得指定行、列中的最后一个非空单元格
使用VBA对工作表进行操作时,经常需要定位到指定行或列中最后一个非空单元格,此时可以使用Range对象的End属性,在取得单元格对象后便能获得该单元格的相关属性,
17
VBA常用技巧解析
如单元格地址、行列号、数值等,如下面的代码所示。
#001 Sub LastRow() #002 Dim rng As Range
#003 Set rng = Sheet1.Range(\
#004 MsgBox \列中最后一个非空单元格是\#005 & \行号\数值\#006 Set rng = Nothing #007 End Sub
代码解析:
LastRow过程使用消息框显示工作表中A列最后非空单元格的地址、行号和数值。 End属性返回一个Range对象,该对象代表包含源区域的区域尾端的单元格。等同于按键
expression.End(Direction)
参数expression是必需的,一个有效的对象。
参数Direction是可选的,所要移动的方向,可以为表格 3-1所示的XlDirection 常量之一。
常量 xlDown xlToRight xlToLeft xlUp 值 -4121 -4161 -4159 -4162 描述 向下 向右 向左 向上 表格 3-1 XlDirection 常量
Range对象的End属性返回的是一个Range对象,因此可以直接使用该对象的属性和方法。
运行LastRow过程结果如图 3-1所示。
18
VBA常用技巧解析
图 3-1 获得A列最后一个非空单元格
通过修改相应的参数,能够获得指定行中最后一个非空单元格,如下面的代码所示。
#001 Sub LastColumn() #002 Dim rng As Range
#003 Set rng = Sheet1.Range(\
#004 MsgBox \第一行中最后一个非空单元格是\#005 & \列号\数值\#006 Set rng = Nothing #007 End Sub
代码解析:
LastColumn过程使用消息框显示工作表中第一行最后一个非空单元格的地址、列号和数值,如图 3-2所示。
图 3-2 获得第一行最后一个非空单元格
19
VBA常用技巧解析
技巧4 定位单元格
在Excel中使用定位对话框可以选中工作表中特定的单元格区域,而在VBA中则使用SpecialCells方法,如下面的代码所示。
#001 Sub SpecialAddress() #002 Dim rng As Range
#003 Set rng = Sheet1.UsedRange.SpecialCells(xlCellTypeFormulas) #004 rng.Select
#005 MsgBox \工作表中有公式的单元格为: \#006 Set rng = Nothing #007 End Sub
代码解析:
SpecialAddress过程使用SpecialCells方法选中工作表中有公式的单元格,并用消息框显示其地址。
SpecialCells方法返回一个Range对象,该对象代表与指定类型及值相匹配的所有单元格,语法如下:
expression.SpecialCells(Type, Value)
参数expression是必需的,返回一个有效的对象。
参数Type是必需的,要包含的单元格,可为表格 4-1所列的XlCellType常量之一。
常量 xlCellTypeAllFormatConditions xlCellTypeAllValidation xlCellTypeBlanks xlCellTypeComments xlCellTypeConstants xlCellTypeFormulas xlCellTypeLastCell xlCellTypeSameFormatConditions xlCellTypeSameValidation xlCellTypeVisible 值 -4172 -4174 4 -4144 2 -4123 11 -4173 -4175 12 描述 任意格式单元格 含有验证条件的单元格 空单元格 含有注释的单元格 含有常量的单元格 含有公式的单元格 使用区域中最后的单元格 含有相同格式的单元格 含有相同验证条件的单元格 所有可见单元格 表格 4-1 XlCellType常量
第3行代码将SpecialCells方法的Type参数设置为xlCellTypeFormulas,返回的是含
20