Excel VBA错误13 Me.ActiveControl中的类型不匹配
我正在为具有多个文本框的表单创建一个commmon验证子例程。 对于每个文本框,我都有一个触发以下内容的退出事件:Excel VBA错误13 Me.ActiveControl中的类型不匹配,vba,excel,Vba,Excel,我正在为具有多个文本框的表单创建一个commmon验证子例程。 对于每个文本框,我都有一个触发以下内容的退出事件: Private Sub formatoNumerico(Optional ByVal Cancel As MSForms.ReturnBoolean) Dim tb As MSForms.TextBox Set tb = Me.ActiveControl ' Do something 这会在代码的第三行生成错误13类型不匹配,为什么 提前感谢您的帮助 退出时,Tex
Private Sub formatoNumerico(Optional ByVal Cancel As MSForms.ReturnBoolean)
Dim tb As MSForms.TextBox
Set tb = Me.ActiveControl
' Do something
这会在代码的第三行生成错误13类型不匹配,为什么
提前感谢您的帮助 退出时,
Textbox
不再是活动控件,因此,当您尝试将Textbox类型变量设置为当前控件(可能是也可能不是Textbox)时,将导致此错误
您需要修改代码,以明确引用您感兴趣修改的
文本框
控件。您可以在初始化表单时使用一些全局变量引用它,然后在代码中使用该引用。选项卡主机控件是一个容器,因此它优先于其组成部分
最简单的方法是将文本框传递给FormatOnAmerico
,否则需要通过询问当前选项卡的活动控件来识别文本框:
Private Sub formatoNumerico(Optional ByVal Cancel As MSForms.ReturnBoolean)
Dim tb As MSForms.TextBox
If Not (Me.ActiveControl Is Nothing) Then
If TypeOf Me.ActiveControl Is MultiPage Then
Set tb = Me.ActiveControl.Pages(Me.ActiveControl.Value).ActiveControl
Else
Set tb = Me.ActiveControl
End If
Debug.Print tb.Name
End If
End Sub
另请注意,在不同选项卡上的控件之间切换不会引发\u Exit
当ActiveControl不是文本框时调用它,请添加MsgBox TypeName(Me.ActiveControl)
作为第一行,并查看活动控件是如何多页显示的(因为文本框位于其中)我希望避免成倍增加变量的数量(在本例中是文本框),因为这种形式中有很多变量。是否可以将退出事件触发的文本框引用传递到此公共过程?我不确定您的使用场景,但可能更新后的或更新前的更适合您的目的。谷歌搜索这两个,你会发现MSDN的参考和相同的例子。