尝试检测是否关闭了用户窗体时在Excel VBA中得到“运行时错误'13':类型不匹配”

im_chc

我正在使用Excel宏,在某个时候我需要确定某个用户窗体实例是否已经关闭/卸载。

我只想通过处理userform变量来做到这一点,而不想通过在form_queryclose事件处理程序中添加代码来做到这一点。原因是用户表单是由其他工作簿创建的,而AFAIK我无法知道用户表单的创建时间。

到现在为止,我唯一遇到的是以下错误(使我难以忍受):

Run-time error '13': Type mismatch

重现错误的方法如下(我使用的是MS Excel 2010 Pro Plus 32位):

  • 创建一个工作簿并照常打开VBA IDE。创建一个用户窗体,将默认名称保留为“ UserForm1”
  • 创建一个模块并粘贴以下行:

    Option Explicit
    
    Dim f As UserForm1
    
    Sub proc1()
        Set f = New UserForm1
        f.Show 0
    
    End Sub
    
    Sub proc2()
        If Not IsFormLoaded(f) Then    ' <---- Error
            MsgBox "form is unloaded already!"
            Exit Sub
        End If
        MsgBox f.Caption
    End Sub
    Function IsFormLoaded(f As Variant) As Boolean
        If f Is Nothing Then Exit Function
    
        If Not TypeOf f Is UserForm Then Err.Raise -1, , "Parameter is not a user form!"
        Dim errnum As Long, v
    On Error GoTo er
        v = f.Caption
    er:
        errnum = Err.Number
    On Error GoTo 0
        IsFormLoaded = errnum = 0
    End Function
    
  • 将插入符放在proc1处,然后按F5键执行它。弹出一个表格。立即关闭它。

  • 将插入符号放在proc2上,然后按F5 ...

IsFormLoaded是函数,这是我提出您正在阅读的这个问题的重点。这是为了避免在用户窗体COM对象处于无效状态时访问用户窗体的成员变量。

如果您不愿单步执行代码,则会发现光标会像平常一样愉快地通过IsFormLoaded的行,但是错误点将位于proc2()的第一行(如果不是IsFormLoaded(f),则)。

我只希望IsFormLoaded可以工作,并且如果有解决方法,那会很好,但是使用VBA.Userforms来检查可用性是不可能的,因为该用户窗体属于其他工作簿,并且不会在VBA.Userforms中找到。

罗里

将声明更改为 Function IsFormLoaded(ByVal f As Variant) As Boolean

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel VBA运行时错误类型不匹配13

Excel VBA运行时错误“ 13”:类型不匹配

运行时错误 13' 类型不匹配 VBA excel

VBA Excel中的“运行时错误13:类型不匹配”错误

Excel运行时错误13中的VBA:类型不匹配

Application.Wait和Excel VBA运行时错误'13'类型不匹配

Excel VBA数据透视缓存类型不匹配运行时错误'13'

尝试以编程方式创建用户窗体按钮时,运行时“ 13”错误类型不匹配

运行-时间错误“ 13”:类型不匹配-Excel用户窗体

得到运行时错误“ 13”:运行以下宏时键入不匹配

Excel VBA运行时错误“ 13”:将变量数组传递给Application.Index方法时,类型不匹配

VBA Excel“错误13:类型不匹配”

运行时错误“13”:宏中的类型不匹配

运行时错误“13”:显示来自 JSON 数组的数据时出现类型不匹配错误

VB Excel 2010运行时错误'13':类型不匹配

工作的DLL代码失败,并出现运行时错误13:调试时类型不匹配

打开工作簿时如何解决“运行时错误” 13'类型不匹配

尝试检查单元格是否包含整数时出现运行时错误 13 类型不匹配

运行时错误'13:比较日期时键入不匹配-EXCEL VBA

我在VBA excel中编写编码器。我不断收到运行时错误13。它说不匹配

运行时错误'13':类型不匹配,定义了PivotCahe

运行时错误13,类型不匹配MsgBox取消

运行时错误“13”类型不匹配:如果或

类型不匹配运行时错误13

运行时错误13 /类型不匹配

工作表运行时错误“13”:类型不匹配

在某些值之间运行IF函数时,VBA类型不匹配/运行时错误为'13'-为什么会发生这种情况?试图隐藏空的行

Access 2010 VBA类型不匹配(错误13)或运行时错误424(必需的对象)

继承上的 VBA 类型不匹配(错误 13),用户来自