Excel VBA错误13 Me.ActiveControl中的类型不匹配

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

我正在为具有多个文本框的表单创建一个commmon验证子例程。 对于每个文本框,我都有一个触发以下内容的退出事件:

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的参考和相同的例子。