工作表和工作簿对象可以通过两种方式访问其属性。
Sheet1.cells(1,2)
Cells(1,2)
我很好奇的是,当隐式调用属性时,VBA如何知道要使用哪个对象?还有更多的对象与这些隐式调用兼容吗?
这是一个简单的实验,我把它放在一起,它显示了一些对象焦点发生变化的情况以及它没有变化的情况:
'Sheet1 has 2 row in column A
'Sheet2 has 5 rows in column A
Sub test()
Dim obj As Object
Set obj = Sheet1
'focus is set when a sheet is called directly
row1 = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
'focus is set when a sheet is called through reference
row2 = obj.Range("A" & Rows.Count).End(xlUp).Row
'focus is not set by with
With Sheet2
row3 = Range("A" & Rows.Count).End(xlUp).Row
End With
'output = 5 : 2 : 2
MsgBox row1 & " : " & row2 & " : " & row3
End Sub
答案 0 :(得分:1)
所有Excel对象引用的工作方式如下:
Workbook -> Worksheet -> Range
如果省略上一个节点,Excel会将“Active”对象替换为省略的节点。例子:
Sheet1.Cells(1,1)
与ThisWorkbook.Sheets("Sheet1").Cells(1,1)
相同
Cells(1,1)
与ActiveWorksheet.Cells(1,1)