web-dev-qa-db-fra.com

Vérifiez si le formulaire utilisateur est ouvert

Je lance un programme qui se répète. Il devrait s'arrêter lorsque l'utilisateur ferme le formulaire utilisateur. Il fonctionne sans s'arrêter.

Puisque le programme s'appelle lui-même toutes les 8 secondes, je veux vérifier à la fin si le formulaire utilisateur est toujours chargé/ouvert.

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

Vous pouvez utiliser une fonction comme celle-ci:

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

Usage:

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

Votre code devrait ressembler à ceci:

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

J'ai trouvé un champ qui devrait permettre de l'identifier facilement:

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

Voici une version qui indique à la fois si elle est chargée et si elle est visible:

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