VBA强制variables作为参考

所以我在VBA中引入了一些非常奇怪的问题,我相信这是VBA的一个“特性”。

现在下面的代码生成一个types不兼容的错误:

Sub MyFoo() Dim txtTest As TextBox Set txtTest = frmFoo.txtExistingTextBox End Sub 

所以我得出的结论是,VBA尝试将frmFoo.txtExistingTextBox.Value的string值放在txtTest中,而我严格地想要获得TextBox控件对象。

我知道在某些语言中,有一种方法可以定义是否要通过引用而不是通过引用来做一个动作,这样可以解决问题,但我不知道如何实现。

我知道我可以简单地声明txtTest为变体,但我觉得这是非常不洁的: – /

谢谢!

恐怕你的结论是错的。 发生不匹配,因为Excel的对象库有一个文本框对象,它不同于用户窗体上使用的MSForms文本框。 你应该使用:

 Sub MyFoo() Dim txtTest As MSForms.TextBox Set txtTest = frmFoo.txtExistingTextBox End Sub 

设置始终是通过引用。 尝试声明完整的types:

 Private Sub UserForm_Click() Dim control As MSForms.TextBox Set control = Me.TextBox1 End Sub 

这也可能是一个汇编问题。 在这种情况下,尝试修改模块或重新命名并再次运行代码。