打开无模式用户窗体后,代码保持 运行

Code keeps running after modeless userform is opened

加载无模式用户窗体时,其中的代码(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 sub 运行没有问题,但是用户窗体没有出现在屏幕的前面,代码在 GoTo ExSub 处继续,然后结束代码执行。用户窗体保持打开状态,但在我按下其中一个命令按钮时关闭。

"Code execution will also continue in the background while a modeless form is shown."

这就是让我重新站起来的原因。我知道这一点但已经忘记了它,因为我坚信并且仍然相信在我的程序的以前版本中我有一个无模式的 UF 运行 DID 中断了代码。

我最终通过添加一个简单的循环来检查 UF

的状态解决了 运行 代码的问题
Do Until Userform1.Visible = False
    DoEvents
Loop

这当然是 CPU 的一个小缺点,所以不是很理想,但由于这不是程序中非常密集的部分,所以它就可以了。

我在此实例中使用的用户窗体必须是无模式的,因为用户需要能够滚动浏览用户窗体以确保他们在 UF 中填充控件的内容是正确的。这是不可编程的。

如果有人有任何其他方法可以实现此目的,请告诉我。