如何在VBA中使用对象?

工作表和工作簿对象可以通过两种方式访问​​其属性。

  1. 显式Sheet1.cells(1,2)
  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 

所有的Excel对象引用都是这样工作的:
Workbook -> Worksheet -> Range

如果省略前面的节点,则Excel会将“活动”对象replace为省略的对象。 例子:
Sheet1.Cells(1,1)ThisWorkbook.Sheets("Sheet1").Cells(1,1)
Cells(1,1)ActiveWorksheet.Cells(1,1)