Userform - 检查是否在If语句中打开

时间:2018-05-28 09:58:12

标签: vba excel-vba loops userform loaded

嘿伙计们,我在这里得到一个简短的问题。我搜索了一会儿,没有回答我搜索的那个。

在我的代码中,我运行了一个重复自己的程序。当用户关闭用户窗体时,它应该停止。现在它运行没有停止它。 由于程序每8秒调用一次,我想检查用户窗体是否仍然加载/打开。

- >我怎么能要求呢?

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

先谢谢你的帮助, 最好的祝福 Lutscha

3 个答案:

答案 0 :(得分:6)

您可以使用以下功能:

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

用法:

If IsLoaded("Form_Test") Then
    'Do Something
End If

您的代码应如下所示:

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

答案 1 :(得分:0)

我找到了一个有助于轻松识别它的字段:

  if userform.visible=true then
    do something
  end if

答案 2 :(得分:0)

这是一个同时显示是否已加载和是否可见的版本:

"Uncaught Error: Invariant failed: You should not use <Route> outside a <Router>