首页 > 解决方案 > 打开无模式用户窗体后代码继续运行

问题描述

当加载无模式用户表单时,其中的代码(除了 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执行,然后结束代码执行。用户窗体保持打开状态,但在我按下其中一个命令按钮时关闭。

标签: excelvbauserformmodeless

解决方案


“在显示无模式表单时,代码执行也将在后台继续。”

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

我最终通过添加一个简单的循环来检查运行代码的状态UF

Do Until Userform1.Visible = False
    DoEvents
Loop

当然,这对 CPU 来说是一个小缺点,所以并不理想,但由于这不是程序中非常密集的部分,它会做的。

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

如果有人有任何其他方法可以实现这一点,请告诉我。


推荐阅读