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

У меня есть пользовательская форма.Идея состоит в том, чтобы проверить, есть ли какие-либо «Истинные» значения в столбце (15) на странице «Администратор».Если имеется хотя бы одно значение True, пользовательская форма останется открытой и продолжит свою работу.

Однако, если не найдено ни одного True, пользовательская форма отобразит сообщение изакройте пользовательскую форму автоматически.

Private Sub Userform_initialize()

    Dim LR As Long
    LR = Sheets("Project_Name").Cells(Rows.Count, "B").End(xlUp).Row

    With Worksheets("Admin")
        For i = 7 To LR
            If .Cells(i, 15) = "True" Then
                Exit For
            Else
                MsgBox ("No values found")
                Exit For
                Unload Me
            End If
        Next i
    End With
    ''' more code'''
End Sub

Все в моей пользовательской форме работает должным образом, за исключением того факта, что я не могу автоматически закрыть ее.Т.е. Unload Me не работает.

Любой совет?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Вы должны проверить свои критерии, прежде чем даже отобразить UserForm. Вы можете добавить это как условие, где бы вы ни звонили UserForm. Не нужно открывать форму, чтобы сразу же закрыть ее, когда вы можете проверить заранее.

В первом случае True, UserForm откроется и выйдет из подпрограммы. Если цикл завершится (не найдет True значений), подпрограмма перейдет к вашему MsgBox

Sub OpenForm

With Worksheets("Admin")
    For i = 7 To LR
       If Cells(i,15) = "True" then 
         Userform.Show
         Exit Sub
       End If
    Next i
End With

MsgBox "No Values Found"

End Sub
0 голосов
/ 24 июня 2018

Пожалуйста, посмотрите на ваш код;вы поставили Unload Me is Exit For

    'Here is something for you to ponder on .........


    'Public enum type to add a set of particular vbKeys to the standard key set
    Public Enum typePressKeys
        vbNoKey = 0
        vbExitTrigger = -1
        vbAnswerKey = 100
        vbLaunchKey = 102
        vbPrevious = 104
        vbNext = 106
        vbSpecialAccessKey = 108
    End Enum

    Public Sub doSomethingWithMyUserform()
    Dim stopLoop As Boolean, testVal As Boolean, rngX As Range, LR As Long

    LR = ThisWorkbook.Sheets("Project_Name").Cells(Rows.Count, "B").End(xlUp).Row
    Set rngX = ThisWorkbook.Worksheets("Admin")
    testVal = False
    With rngX 'Your sub can do the check here
        For i = 7 To LR
           If .Cells(i, 15) = "True" Then
                testVal = True
                Exit For
            End If
        Next i
    End With

    If testVal Then
        Load UserForm1
        With UserForm1
            .Caption = "Something"
            .Tag = vbNoKey
            .button_OK.SetFocus 'Assuming you have a OK button on Userform1
        End With
        UserForm1.Show
        stopLoop = False
        Do
            If UserForm1.Tag = vbCancel Then
                'Do something perhaps
                Unload UserForm1
                stopLoop = True
            ElseIf UserForm1.Tag = vbOK Then
                'Do something specific
                Unload UserForm1
                stopLoop = True
            Else
                stopLoop = False
            End If
        Loop Until stopLoop = True
    else
       MsgBox "No values found"
    End If

    'Here you can close the way you want
    Set rngX = Nothing

    End Sub

        enter code here
...