Проверьте, открыта ли пользовательская форма - PullRequest
0 голосов
/ 28 мая 2018

Я запускаю программу, которая повторяется.Он должен остановиться, когда пользователь закрывает пользовательскую форму.Он работает без остановки.

Поскольку программа вызывает себя каждые 8 ​​секунд, в конце я хочу проверить, по-прежнему ли пользовательская форма загружена / открыта.

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

Ответы [ 3 ]

0 голосов
/ 07 мая 2019

Я нашел поле, которое должно помочь легко его определить:

  If userform.Visible = True Then
      'do something
  End If
0 голосов
/ 31 мая 2019

Вот версия, которая показывает, загружен ли он и виден ли он:

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
0 голосов
/ 28 мая 2018

Вы можете использовать такую ​​функцию:

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
...