VBA-检查特定用户表单是否已加载

Mah*_*hdy 1 excel vba userform

我想检查在运行代码时是否加载了用户表单。我尝试了几种方法,没有人工作。我记得我以前这样做过,但我不记得我的解决方法。任何的想法?

我在这里和其他地方找到了一些解决方案,但它们也不起作用!

问题是……

  1. vba.userforms 只接受索引号,而不是字符串索引,
  2. 在用户窗体上的循环中,无法检查名称等某些属性!

这是我的尝试:

Public Function IsFormVisible(FrmName As String) As Boolean
On Error GoTo errorH
    IsFormVisible = False
    Set Frm = UserForms(FrmName)
    If Not Frm Is Nothing Then IsFormVisible = True
    End Function
errorH:
    IsFormVisible = False
End Function
Run Code Online (Sandbox Code Playgroud)
Public Function IsFormVisible(FrmName As String) As Boolean
Dim Frm As UserForm
On Error GoTo errorH
    IsFormVisible = False
    For Each Frm In VBA.UserForms
        If Frm.Name = FrmName Then
           IsFormVisible = True
           Exit Function
        End If
    Next
errorH:
    IsFormVisible = False
End Function
Run Code Online (Sandbox Code Playgroud)

Ror*_*ory 5

这里有两个简单的选项。首先,您可以声明frmObject

Public Function IsFormVisible(FrmName As String) As Boolean
    Dim Frm As Object
On Error GoTo errorH
    IsFormVisible = False
    For Each Frm In VBA.UserForms
        If LCase$(Frm.Name) = LCase$(FrmName) Then
           IsFormVisible = True
           Exit Function
        End If
    Next
errorH:
    IsFormVisible = False
End Function
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用TypeName代替.Name

Public Function IsFormVisible(FrmName As String) As Boolean
    Dim Frm As UserForm
'On Error GoTo errorH
    IsFormVisible = False
    For Each Frm In VBA.UserForms
        If lcase$(TypeName(Frm)) = lcase$(FrmName) Then
           IsFormVisible = True
           Exit Function
        End If
    Next
errorH:
    IsFormVisible = False
End Function
Run Code Online (Sandbox Code Playgroud)

我已经使这两个不区分大小写。