32. VBA(五)对象操作
Excel对象主要有4个:
- 工作薄 Workbook
- 工作表 Worksheet
- 单元格区域 Range
- 单元格 Cell
这里只讲后面3个,不讲工作薄。原因:
工作薄其实就是一个Excel文件。不建议直接操作Excel文件,因为文件属性被更改的机率高,比如修改了文件名,或者文件被移动到其它地方去,这样 写死的VBA代码就不管用了。
在多数情况下,如果需要操作多个工作薄中的数据,建议把这些工作薄里面的表复制到一个工作薄中进行操作。
1. 操作工作表 Worksheets
其实对工作表的操作,更多是对其引用。当一个工作薄中有多个工作表而需要用到不同表中的数据时,就需要分别引用不同的工作表。
2. 操作单元格区域 Range
单元格区域,即Range对象。应该是在Excel VBA中用得最多的对象。Range对象是Worksheet对象的一个子集。所以通常通过worksheet_object.Range()的方式来引用。
单个单元格区域的引用
set rng_sellingPrice = sht_productlist.Range("D2")
多个连续单元格区域的引用
set rng_sellingPrice = sht_productlist.Range("D2:D5")
3. 操作单元格对象
Cells,括号里面输入用数字表示的行号和列号,即可引用到单个单元格对象。Cells对象也是Worksheet对象的一个子集。通常通过worksheet_object.Cells()的方式来引用。
单个单元格的引用,使用Cells和使用Range好像没什么区别,但在进行数据处理时,我们经常需要动态地把数据读或写入一个单元格中,这时,用数字表示位置的Cells对象,再结合For循环,操作起来就很方便了。
如以下代码可以把A1到D5中所有单元格的内容分别输出:
Sub test2()
Dim sht_slea As Worksheet
Set sht_slea = Worksheets("SLEA")
For r = 1 To 5
For c = 1 To 4
Debug.Print sht_slea.Cells(r, c)
Next
Next
End Sub
PS
- Range对象便于把单元格区域作为一个整体来引用或操作,如格式设置。而Cells对象则方便于对每一个单元格分别进行操作
- 结合Cells对象的Range
例如Range("B2:D4")也可以用Range(Cells(2, 2), Cells(4, 4))来表示。如需要根据条件来判断区域的开始和结束位置时,它就派上用场了。
4. 父对象
Worksheet对象的父对象为Application对象。Range的父对象是Worksheet对象,Cells对象的父对象也是Worksheet对象。所以在给这些对象赋值时,标准的写法应当要把父对象给写上。
Set sht_slea = Application.Worksheets("SLEA")
Set title_rng = sht_slea.Range("A1:D1")
Set data_rng = sht_slea.Range(sht_slea.Cells(2, 1), sht_slea.Cells(4, 4))
如果VBA中的代码涉及到的对象都位于一个worksheet中,而这个worksheet当前是激活状态,则这些父对象是可以省略的。默认就是当前(激活的)worksheet。
建议在引用Range对象时,Worksheet对象不要省略
在单独引用Cells对象时,Worksheet对象也不要省略