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

在VBA中对象焦点是如何工作的?,vba,excel,Vba,Excel,工作表和工作簿对象可以通过两种方式访问其属性 明确地➔ 表1.单元格(1,2) 含蓄地➔ 单元格(1,2) 我好奇的是,当隐式调用属性时,VBA如何知道要使用哪个对象?还有更多的对象与这些隐式调用兼容吗 下面是我做的一个简单的实验,它展示了一些物体焦点改变的情况,以及物体焦点没有改变的情况: 'Sheet1 has 2 row in column A 'Sheet2 has 5 rows in column A Sub test() Dim obj As Object Set o

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

  • 明确地➔ <代码>表1.单元格(1,2)
  • 含蓄地➔ <代码>单元格(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对象引用的工作方式如下:
    工作簿->工作表->范围

    如果省略上一个节点,Excel将用“活动”对象替换省略的对象。示例:
    Sheet1.Cells(1,1)
    thishworkbook.Sheets(“Sheet1”).Cells(1,1)


    单元格(1,1)
    活动工作表相同。单元格(1,1)

    您使用的
    不正确-应该是
    .Range(“A”和.Rows.Count)。End(xlUp)。Row
    -注意前导的周期,但这实际上是故意的。我试着看看with语句本身是否可以简单地将焦点切换到sheet2,这样就可以解释为什么它什么都没做;-)<代码>工作表1.单元格(1,1)
    ActiveWorkbook.Sheets(“工作表1”).单元格(1,1)
    相同。它与
    此工作簿.Sheet1.Cells(1,1)
    相同。与
    Sheets(“Sheet1”).Cells(1,1)
    不同,后者与
    ActiveWorkbook.Sheets(“Sheet1”).Cells(1,1)
    相同。我刚刚做了一个测试,似乎“ActiveSheet”总是设置为正在显示的工作表,即使您刚刚在vba中调用了另一个工作表code@Alter,调用工作表不会使其处于活动状态。必须激活/选择工作表才能“激活”