Код продолжает работать после открытия немодальной пользовательской формы - PullRequest
0 голосов
/ 12 февраля 2019

Когда загружается немодальная пользовательская форма, код в ней (за исключением подпрограммы Userform_Initialize) иногда не выполняется, и основной код, который вызывает пользовательскую форму, продолжает работать.это было в последнем обновлении моей программы, которое, к сожалению, было повреждено.

Sub start() 'shortened drastically, but accurate
'....

If UBound(rs.GetRows(1000000), 2) + 1 < 6 Then
    .Close SaveChanges:=False
    ThisWorkbook.Sheets("Start").Range("DA1").Value = "1"
    ThisWorkbook.Sheets("Start").Range("DA2").Value = MachineNr
    UserForm1.Show vbModeless
    GoTo ExSub
End If 

'...
ExSub:
End Sub

И в модуле пользовательской формы:

Private Sub UserForm_Initialize()
Dim wb As Workbook

If ThisWorkbook.Sheets("Start").Bijwerken = "ja" Then
    Me.CommandButton2.Caption = "Cancel"
    Me.Label1.Caption = "Select a file to update"

    bestand = ""
    With Me.ComboBox1
        For Each wb In Application.Workbooks
        If Not wb.Name = ThisWorkbook.Name Then
            For Each sht In wb.Sheets 
                If sht.Name = "AssetTypeTask" Then
                    .AddItem wb.Name
                    Exit For
                End If
            Next sht
        End If
        Next wb
    End With

Else
    bestand = ""
    With Me.ComboBox1
        For Each wb In Application.Workbooks
        If Not wb.Name = ThisWorkbook.Name Then
            .AddItem wb.Name
        End If
        Next wb
    End With

End If
End Sub

Код проходит через подпрограмму Userform_Initialize без проблем,но пользовательская форма не появляется в передней части экрана, и код продолжается на GoTo ExSub, что затем завершает выполнение кода.Пользовательская форма остается открытой, но закрывается, когда я нажимаю на ней одну из командных кнопок.

1 Ответ

0 голосов
/ 14 февраля 2019

"Выполнение кода также будет продолжаться в фоновом режиме, пока отображается немодальная форма."

Это то, что вернуло меня на ноги.Я знал это, но забыл об этом, поскольку я твердо верю и все еще верю, что в предыдущих версиях моей программы у меня был немодальный UF, работающий из-за того, что DID прерывал код.

В итоге я решил проблемуВыполнение кода путем добавления простого цикла для проверки состояния UF

Do Until Userform1.Visible = False
    DoEvents
Loop

Это небольшой недостаток для процессора, конечно, поэтому не идеальный, но так как это не очень интенсивная частьпрограмма это сделает.

Пользовательская форма, которую я использую в этом случае, должна быть немодальной, потому что пользователь должен иметь возможность прокручивать пользовательскую форму, чтобы убедиться, что он заполняет элементы управления в UFверно.Это не программируется.

Если у кого-то есть другие способы добиться этого, пожалуйста, дайте мне знать.

...