今天...
阳光花园是一个很大的住宅小区,布置有25栋楼房,每栋楼由高18层的4个单元楼组成,每个单元楼住有2户,每户按楼层编有门牌号。梦梦同学住在9栋4单元601室。
今天,老师要到梦梦家里家访。进入阳光花园小区后,老师要先找到9号楼,再找到4单元,乘座电梯到6楼,找到601室,就到了梦梦家里。
简化一下表示,我们用句点来代替图中的箭头号,那么找到601室就可以表示为:
阳光花园.9号楼.4单元.601室
那么,在Excel VBA中,我们怎么才能找到工作簿Book1.xlsm中的工作表Sheet1中的单元格A1呢?经过前面的系列介绍,我们知道单元格A1在代码中的表示为:
Range(“A1”)
而工作表Sheet1属于Worksheets集合,在代码中的表示为:
Worksheets(“Sheet1”)
工作簿Book1.xlsm属于Workbooks集合,在代码中的表示为:
Workbooks(“Book1.xlsm”)
根据Excel对象层次模型,我们要找到单元格A1,就要经过下所示的路线:
同样,我们用句点来代替图中的箭头号,那么在VBA中找到单元格A1可以表示为:
Application.Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”)
实际上,这就是VBA中引用对象的方式,即通过使用句点层层限定直至达到要引用的对象。
由此,我们引出VBA中引用对象的一条规则:
规则1:对象.(对象…对象).对象
在对象模型中,处于被引用对象上层的对象位于左侧,被引用的对象位于最右侧。
看看Excel的那些常用对象(3)
记得上学的时候,老师经常会在作业本上的空白处写一些评语,或者是对某段话的评价,或者是表扬做得认识,等等。Excel工作表中的批注类似于这些评语,让我们能够为单元格添加评语,为单元格传递更丰富的信息。 Comment对象 Comment对象代表单元格批注。如下所示,单击“审阅”选项卡中的“新建批注”命令,为单元格C5
实际上,我们通常就是在Excel中操作,所以可以省略掉Application对象限定,即引用单元格A1的代码可以简化为:
Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”)
如果我们只是在工作簿Book1.xlsm中操作,将该工作簿作为当前工作簿,那么代码可以进一步简化为:
Worksheets(“Sheet1”).Range(“A1”)
如果工作表Sheet1为当前工作表,代码不会应用到其它工作表中,那么代码再次简化:
Range(“A1”)
这代表在当前活动工作簿中的当前工作表中的单元格A1。
这就好比我们都在一个办公楼里工作,当你问我现在在哪里时,如果我正在601室,那么我只需回答在601室就够了,因为大家彼此都知道,而无须回答我在××区××写字楼××层××室这么繁锁了。
由此,我们又可以引出VBA中引用对象的一条规则:
规则2:若对象就是当前对象,则可以省略句点左侧的对象限定,简化代码。
注意规则的前提是,我们引用的对象就是当前活动对象,如果不是当前活动对象,就会产生不想要的结果或错误[jf1] 。例如,当前活动工作表为Sheet2,而我们要找的是工作表Sheet1中的单元格A1,此时,如果只写代码:
Range(“A1”)
它代表的是工作表Sheet2中的单元格A1。要找到工作表Sheet1中的单元格1,必须在左侧加上限定:
Worksheets(“Sheet1”).Range(“A1”)
省略Application对象限定
在编写代码时,对于Application对象的那些返回对象的属性,我们常常省略掉Application对象限定,例如前面的文章中的ActiveWorkbook属性、ActiveWindow属性、ActiveCell属性、Cells属性、Selection属性、Rows属性、Columns属性,等。只需要直接以属性开头进行引用,例如,代码:
ActiveCell
代表当前活动工作表中的活动单元格。
Excel的那些常用对象(2)
在学习的过程中,我们往往会忽视细节,甚至对有些关键细节也一带而过,结果就会造成一知半解或不懂装懂。虽然过多地纠缠于细节,会耗费很多的精力,有时也会陷于不能自拔而走进死胡同,但是认识一些细节,有助于对所学知识的更深入的理解,更会打下坚实的基础。那么,闲话少说,下面我们就来解单元格在Excel VBA代码中的表示。 在工