web-dev-qa-db-ja.com

ユーザーフォームが開いているかどうかを確認します

自分自身を繰り返すプログラムを実行します。ユーザーがユーザーフォームを閉じると停止します。止まることなく走ります。

プログラムは8秒ごとに自分自身を呼び出すので、最後に、ユーザーフォームがまだロード/オープンされているかどうかを確認したいと思います。

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

次のような関数を使用できます。

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
8
gizlmo

私はそれを簡単に識別するのに役立つはずのフィールドを見つけました:

  If userform.Visible = True Then
      'do something
  End If
1
Tornar

以下は、ロードされているかどうか、および表示されているかどうかの両方を示すバージョンです。

Function Userform_Check( _
    form_name As String) _
        As Integer

    ' Returns:
    '   0 - Userform is not loaded
    '   1 - Loaded but not visible
    '   2 - Loaded and visible

    ' mUtilities.Userform_Check()

    Dim frm As Object

    Userform_Check = 0

    For Each frm In VBA.UserForms
        If frm.name = form_name Then
            Userform_Check = 1

            If frm.Visible Then Userform_Check = 2

            Exit For
        End If
    Next frm

' Function Userform_Check( _
    form_name As String) _
        As Integer
End Function
1
RIck_R