【烟花原创】VBA零基础之第29篇 对象(四)
引用对象是非常重要的,因为在代码里访问对象时必须指明需要操作的对象。
例如在日常中我们找某人的,肯定会喊某人的名字(不认识的可以喊美女帅哥),人家才会理你。
可在VBA代码中,你必须实打实的指明某个特定的对象(或者从集合中引用某个特定的成员),代码才会响应你。
例如在日常中我们找某人的,肯定会喊某人的名字(不认识的可以喊美女帅哥),人家才会理你。
可在VBA代码中,你必须实打实的指明某个特定的对象(或者从集合中引用某个特定的成员),代码才会响应你。
上节有讲到集合,通过情况下,我们都是引用集合中某个特定的成员对象。
如何从集合中引用一个对象呢,只需在集合的名称后面的括号中放入过索引号或对象名就行了。
如何从集合中引用一个对象呢,只需在集合的名称后面的括号中放入过索引号或对象名就行了。
示例:
Worksheets ("sheet1")
'当前活动工作簿中的工作表集合中的第一个工作表
Workbooks (1)
'工作簿集合中的第一个
当我们输入的索引号或名称无效时会有一个“下标越界”的错误提示。
当看到这个错误提示时,就要检查引用集合时的所用的索引号或名称是否有误。
当看到这个错误提示时,就要检查引用集合时的所用的索引号或名称是否有误。
注意:这里有个问题,比如当前工作簿中有一个工作表的名称为1,在没有隐藏工作表的情况下,该工作表排在第2位。
当用索引号访问这个工作表时得这样写:worksheets(2)
当用名称访问这个工作表名称为1的工作表时就得这么写 Worksheets ("1")
当用索引号访问这个工作表时得这样写:worksheets(2)
当用名称访问这个工作表名称为1的工作表时就得这么写 Worksheets ("1")
当然,你也可以用变量来代替1或”1”。
Dim i As Integer, s As String
i = 1
s = "1"
Debug.Print Worksheets(i).Name, Worksheets(s).Index
'在立即窗口显示工作表集合中第一个工作表的名称,以及名称为1的工作表的索引号。
之前有讲过Excel应用程序对象包含了很多的对象,而这些对象自身又包含了其他很多的对象。
当我们需要访问Excel应用程序对象时,这是很容易的,只需要在代码区中键入Application。
当我们需要访问Excel应用程序对象时,这是很容易的,只需要在代码区中键入Application。
其他所有的对象都在Application之下,当我们需要访问某个对象时,就需要一级一级访问。
如果把Excel比做一栋楼,当我们需要访问到Excel这栋楼房中的1003住户(工作表),我们先进楼,再坐电梯到10楼(工作簿),再找到1003房间(单元格),敲1003家的房门,进入后里面还有几间,象什么主人房,小孩房,书房,厨房这些啥(单元格的属性),咱还可以访问1003家的某个房间(属性)。
如果把Excel比做一栋楼,当我们需要访问到Excel这栋楼房中的1003住户(工作表),我们先进楼,再坐电梯到10楼(工作簿),再找到1003房间(单元格),敲1003家的房门,进入后里面还有几间,象什么主人房,小孩房,书房,厨房这些啥(单元格的属性),咱还可以访问1003家的某个房间(属性)。
我们把这个过程用个列表简化下
大楼(Excel)--10楼(工作薄)--1003住户(工作表)--客厅(Value属性)
我们访问1003的客厅,就经过了这么几个环节。
咱回到Excel中来继续,在VBA代码中,这些层层的对象之间(上下级)咱们用圆点号相连(英文的.)。
对象.属性.属性 第一个属性本身返回的也是对象
对象.方法
对象.属性
对象.属性.属性 第一个属性本身返回的也是对象
对象.方法
对象.属性
通常在对象的名称后输入.后会有一个自动成员列表(只有极少数对象例外)。
通过这个列表,可以知道该对象有哪些属性,方法和事件。如果选中某个属性,而该属性返回的又是一个对象时,再在属性名后输入.号后还是会有自动成员列表的。
这个自动成员列表,对于我们输入代码还是很有好处的,可以少记很多属性和方法,提高代码的录入速度。
通过这个列表,可以知道该对象有哪些属性,方法和事件。如果选中某个属性,而该属性返回的又是一个对象时,再在属性名后输入.号后还是会有自动成员列表的。
这个自动成员列表,对于我们输入代码还是很有好处的,可以少记很多属性和方法,提高代码的录入速度。
现在看看如何来实现层层引用的:
比如我们要访问当前Excel中的名称为工作簿1.xlsm 的工作簿时,可以这么写
比如我们要访问当前Excel中的名称为工作簿1.xlsm 的工作簿时,可以这么写
Applcation.workbooks("工作簿1.xlsm")
再接上面,如果我要访问工作簿1.xlsm 中的工作表 sheet1时,就在上面的引用后面再加上工作表的引用
Applcation.workbooks("工作簿1.xlsm").worksheets("sheet1")
再继续扒(感觉象是娱记暴料)单元格A3,那就再加个range对象
Applcation.workbooks("工作簿1.xlsm").worksheets("sheet1").range("a3")
再继续挖,要获取A3单元格的值时
Applcation.workbooks("工作簿1.xlsm").worksheets("sheet1").range("a3").value
扒了这么多,不知大家绕晕了没。天啦,Excel对象何其多,才访问4级就这么长了,要是有十几层咱办?
这个写法咱姑且称之为完整引用(一般也不会这么写的)
这个写法咱姑且称之为完整引用(一般也不会这么写的)
既然是完整引用,相对来说,肯定还会有个懒人引用法。
首先由于代码是在Excel中运行,引用的也是Excel自身对象的话,再加上Application是对象层次中的顶级,一般情况下这个是可以省略的(还是有不能省略的,据观察,如果applcation下面的属性返回的是对象时,是可以省略application的)
有了第一条,上面的可以省一截了:
workbooks("工作簿1.xlsm").worksheets("sheet1").range("a3").value
其次,如果工作簿1.xlsm是当前活动工作簿时,工作簿的引用可以再省略:
worksheets("sheet1").range("a3").value
再来,如果工作表 sheet1 是当前活动工作表时,工作表集合的引用也可以省略:
range("a3").value
当然省了这么多,如果还要减字符的话,其实value也可以省略(某些场合不能省)。
range(“a3”).value,省到这个情况下,前面咱不是有讲到当在对象后面输入.后会有自动成员列表嘛,所以value这个属性也没有再省略的必要了。
友情提示:在写代码时,相关的符号注意用英文半角。书写错误时代码区相应的行会以红色显示并伴有提示的。
赞 (0)