打开无模式用户窗体后,代码保持 运行
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 中填充控件的内容是正确的。这是不可编程的。
如果有人有任何其他方法可以实现此目的,请告诉我。
加载无模式用户窗体时,其中的代码(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 中填充控件的内容是正确的。这是不可编程的。
如果有人有任何其他方法可以实现此目的,请告诉我。