在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
'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,调用工作表不会使其处于活动状态。必须激活/选择工作表才能“激活”