检查用户表单是否打开

Lut*_*cha 6 excel vba excel-vba userform

我运行的程序会重复执行。当用户关闭用户窗体时,它应该停止。它运行不停。

由于该程序每8秒调用一次,因此我想在最后检查是否仍然加载/打开了用户窗体。

Public Sub NextPicture1()
   PictureChange = Now + TimeValue("00:00:08")
   If Onboarding_Projekt.Visible = True Then
      Application.OnTime PictureChange, "NextPicture1"
   End If
End Sub
Run Code Online (Sandbox Code Playgroud)

giz*_*lmo 8

您可以使用如下功能:

Public Function IsLoaded(formName As String) As Boolean
Dim frm As Object
For Each frm In VBA.UserForms
    If frm.Name = formName Then
        IsLoaded = True
        Exit Function
    End If
Next frm
IsLoaded = False
End Function
Run Code Online (Sandbox Code Playgroud)

用法:

If IsLoaded("Form_Test") Then
    'Do Something
End If
Run Code Online (Sandbox Code Playgroud)

您的代码应如下所示:

Public Sub NextPicture1()
   PictureChange = Now + TimeValue("00:00:08")
   If IsLoaded("Onboarding_Projekt") Then
      Application.OnTime PictureChange, "NextPicture1"
   End If
End Sub

Public Function IsLoaded(formName As String) As Boolean
    Dim frm As Object
    For Each frm In VBA.UserForms
        If frm.Name = formName Then
            IsLoaded = True
            Exit Function
        End If
    Next frm
    IsLoaded = False
End Function
Run Code Online (Sandbox Code Playgroud)

  • @Lutscha,我遇到了同样的问题。我意识到,我没有将表单名称作为字符串传递,即`IsLoaded("Onboarding_Projekt")`,而是像这样传递表单名称:`IsLoaded(Onboarding_Projekt.name)`。这里的问题是它必须初始化表单才能获得名称,这违背了目的!。改用字符串解决了这个问题。 (2认同)