在VBA中,是否有一种方法可以引用作为变量保存的工作表上的按钮?除非我直接引用工作表,否则它似乎会抛出一个“未找到方法或数据成员”的编译错误。例如:
Sub Test_Parent
Call Test_Child(Temp_WS:=Sheet1)
End Sub
Sub Test_Child(ByVal Temp_WS as Worksheet)
debug.print Temp_WS.Example_Button.Value
End Sub
字符串
上面的代码会在debug.print行上触发错误。鉴于以下各项正常工作:
Sub Test2
debug.print Sheet1.Example_Button.Value
End Sub
型
我的直觉告诉我,这是因为在第二种情况下,编译器会查看直接引用(例如:Sheet1),并可以看到按钮作为成员存在,而在第一种情况下,它会查看变量并将其视为通用工作表类型(而不是Sheet1),因此不认为会有此成员?或者我完全搞错了?
不管怎样,有办法解决吗?(我是不是在做一些愚蠢的事情?)如果不是,那也不是世界末日,但我通常喜欢最小化硬编码的工作表引用的数量,所以如果这是一种解决它的方法,那就太好了。
1条答案
按热度按时间nxagd54h1#
Example_Button
,作为ActiveX
OLEObject
是Sheet1
的成员,可以引用为Sheet1.Example_Button
。但它也是
OLEObject
和shape
。您无法将其作为常规
Worksheet
对象的成员找到。您可以尝试使用Sub
,通常声明参数As Variant
(或As Object
),传递Sheet1
类本身:字符串
这个会有用的实际上,声明
As Variant
或As Object
会模拟下一个Sub
,这允许将参数声明为所涉及的工作表类。唯一一个以您尝试的方式暴露对象的方法:型
但更好的方法是将对象用作
OLEObject
或shape
,这也适用于Worksheet
对象:型
或者是
型
您可以通过以下方式将
Worksheet
事件用于Form
类型的按钮(而不是ActiveX
):型