平时生活中,有很多细节在我们看来似乎是习以为常的。例如,在教孩子剪纸时,我们会选取一张合适大小的纸,然后对其进行裁剪成想要的模样;在维修机器时,我们会先选取合适的扳手,利用它来拧螺丝。像选择纸张并在纸张上进行操作、选取扳手并利用它来做别的事情等等这些操作,是再自然不过的事情了。
平时生活中,有很多细节在我们看来似乎是习以为常的。例如,在教孩子剪纸时,我们会选取一张合适大小的纸,然后对其进行裁剪成想要的模样;在维修机器时,我们会先选取合适的扳手,利用它来拧螺丝。像选择纸张并在纸张上进行操作、选取扳手并利用它来做别的事情等等这些操作,是再自然不过的事情了。
然而,当我们使用Excel VBA来操控单元格时,是否要先选取相应的单元格呢?如果熟悉了VBA,我们立马就可以回答:未必。可以说,在Excel VBA的大多数操作中,选取单元格的动作是多余的,甚至会拖慢代码的速度。但是,选取单元格是最基本的操作,是我们无意中就完成的操作,譬如在Excel工作表界面,我们将鼠标一点,那个周边带框的单元格就是我们选取的单元格,此时,我们应用的格式、输入的数据都在那个单元格中。
这里,我们还是从这个最基本的操作介绍起,逐步扩展到Range对象的诸多有用的属性和方法。
Select方法
Range对象的Select方法表示选择某个单元格或某单元格区域。例如,下面的代码:
Range(“A2”).Select
使单元格A2为当前单元格。
下面的代码:
Range(“C2:C5”).Select
选取单元格区域C2:C5。
下图显示了上述代码运行后的结果:
同样地,下面的代码:
Range(“C5″).Select
Cells(5,3).Select
[C5].Select
Cells(65539).Select
Cells(5,”C”).Select
均选取单元格C5为当前单元格。
下面的代码:
Range(“C2:C5”).Select
Range(“C2″,”C5”).Select
[C2:C5].Select
Range(Range(“C2”), Range(“C5”)).Select
Range(Cells(2, 2), Cells(5, 2)).Select
均选取单元格区域C2:C5。
下面的代码:
Columns(2).Select
Columns(“B”).Select
均选取B列。
下面的代码:
Columns(“B:C”).Select
选取B列和C列。
下面的代码:
Rows(2).Select
Rows(“2:2”).Select
均选取第2行。
下面的代码:
Rows(“2:3”).Select
选取第2行和第3行。
可以看出,在VBA中,您可以采用多种方法来选取要操作的单元格或单元格区域。
您可以在VBE中逐一输入上述代码并运行后对照Excel界面观察运行后的结果,以加深您对单元格对象的理解。
Activate方法
Range对象的Activate方法用于使所选单元格区域中的某单元格为活动单元格。如果没有事先明确地选择某区域,则认为是在当前工作表中的所有单元格中选取某单元格。
例如,下面的代码:
Range(“B2”).Activate
使当前工作表中的单元格B2为活动单元格。
下面的代码:
Range(“B2:C5”).Select
Range(“B5”).Activate
使所选择的单元格区域B2:C5中的单元格B5为当前活动单元格。如下图所示:
下面是一些“奇怪的”现象,如下面的代码:
Range(“B2:D3”).Activate
将选取单元格区域B2:D3,并使该区域的左上角单元格B2为当前活动单元格。如下图所示:
您可以使用不同的单元格区域表示方式,来试验Activate方法。运行代码时结合Excel界面观察其行为,体验Activate方法的实际运行效果。
有兴趣的话,您对ActiveCell属性和Cells属性分别试一试Select方法和Activate方法,看看结果如何?在学习VBA时,多些想法,多些思考,多些尝试,就会对Excel对象理解得更加深入透彻,也会取得更快速的进步。
最后要说明一点的是,本节的内容对熟悉VBA的人来说,可能觉得太啰嗦了,因为熟悉VBA后这两个方法几乎不会用到。但对于初学者来说,在操作一个对象之前先选择它是很自然的一种想法,仔细体验Select方法和Activate方法,有助于打开理解Range对象之门。毕竟,很多初学者的代码或宏录制器的代码中都有大量的Select和Activate存在,并且在我们后续的介绍中也会时不时地出现这两个方法。
此外,对于熟悉的人来说,考虑这两个方法的一些细微之处,也是很有意思的事情。