VBA can';不要引用对象

VBA can';不要引用对象,vba,Vba,我有一个数组,需要在其中填充对显示器上标签的引用。我已设法将我的问题减少到以下MWE: Private Sub Button1_Released() Me.TestLabel.Caption = "Button1" End Sub Private Sub Button2_Released() Dim o As MSForms.Label Set o = Me.TestLabel o.Caption = "Button2" End Sub button1的代码工

我有一个数组,需要在其中填充对显示器上标签的引用。我已设法将我的问题减少到以下MWE:

Private Sub Button1_Released()
    Me.TestLabel.Caption = "Button1"
End Sub

Private Sub Button2_Released()
    Dim o As MSForms.Label
    Set o = Me.TestLabel
    o.Caption = "Button2"
End Sub
button1的代码工作,而Button2失败,并显示消息“对象ILabelControl的方法标题失败(0x80010105)”

TypeName(Me.TestLabel)返回“Label”。当我将Dim更改为“Label”而不是“MSForms.Label”时,我得到的行为看起来像是正在访问的未初始化变量。例如:有时button2会在标签中产生汉字,通常不会发生任何事情,但VBA模块会崩溃

我已尝试删除和恢复typelib引用,但没有效果。我已尝试将引用从office v16 fm20.dll更改为syswow64 v14 fm20.dll,但没有效果

这是以前在一台机器上开发并转移到另一台机器上的功能正常的应用程序。我已经考虑过重新创建显示器,但是MWE来自一个新的显示器,它是在新机器上创建的,只有一个标签和两个按钮

我被困在这里了


ed:将dim从MSForms.Label更改为Object worked

这是VBA吗?我不熟悉阿布顿释放事件。有一个MouseUp事件,但没有发布事件。我同意Tim的观点。SUB是由事件调用的还是由代码调用的?如果只使用
Dim o作为对象会发生什么情况
?这很有效。非常感谢。对于其他应用程序,宿主应用程序是FactoryTalk View SE,它只是标准的事件处理程序。