对象焦点如何在VBA中工作?

时间:2014-10-15 17:41:09

标签: excel vba excel-vba

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

  1. 明确地➔Sheet1.cells(1,2)
  2. 隐含地➔Cells(1,2)
  3. 我很好奇的是,当隐式调用属性时,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
    

1 个答案:

答案 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)

相同