参考

时间:2016-03-08 10:16:07

标签: excel vba excel-vba

所以我在VBA中遇到了一些非常奇怪的问题,我认为这是该语言的“特性”。

现在,以下代码生成类型不兼容的错误:

Sub MyFoo()

    Dim txtTest As TextBox

    Set txtTest = frmFoo.txtExistingTextBox

End Sub

所以我得出的结论是,VBA试图在txtTest中放入frmFoo.txtExistingTextBox.Value的字符串值,而我非常想获取TextBox控件对象。

我知道在某些语言中有一种方法可以定义你是否想要通过引用而不是值进行修饰,这可以解决这里的问题,但我不知道如何。

我知道我可以简单地将txtTest声明为Variant,但我发现这非常不洁: - /

谢谢!

2 个答案:

答案 0 :(得分:2)

你的结论是错的我害怕。发生不匹配的原因是Excel的对象库具有Textbox对象,该对象与用户窗体上使用的MSForms文本框不同。你应该使用:

Sub MyFoo()

    Dim txtTest As MSForms.TextBox

    Set txtTest = frmFoo.txtExistingTextBox

End Sub

答案 1 :(得分:1)

始终通过引用设置。尝试声明完整类型:

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

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