UserForm冻结后重新启动

我的第一个UserForm被称为DOORFORM。 它有三个button可以打开三个不同的用户窗体。 用户将点击其中一个button,它将打开一个相应的用户窗体。

在这种情况下,让我们说,他点击ALUMDRBTN ,它打开用户窗体ALUMFORM

填写表单后,用户单击ADDBTN ,然后closuresALUMFORMALUMFORMclosures时DOORFORM会自动显示(与其他两个表单相同)。

用户然后再次单击ALUMDRBTN并填写UserForm。 这次用户单击ADDBTN时, Excel冻结,closures它的唯一方法是使用“任务pipe理器”。

这是我的问题。 同样的事情会发生,如果我使用其他用户窗体。

DOORFORM:

Private Sub ALUMDRBTN_Click() Unload Me ALUMFORM.Show End Sub Private Sub HMDRBTN_Click() Unload Me HMFORM.Show End Sub Private Sub PRODRLIST_Click() RunPython ("import testconvertworking;testconvertworking.test_with_file()") End Sub Private Sub WDDRBRN_Click() Unload Me WDFORM.Show End Sub 

ALUMFORM:

 Private Sub ADDBTN_Click() Dim DR_NUM As String Dim DR_TYPE As String Dim DR_HW As String Dim DR_WIDTH As String Dim DR_HEIGHT As String Dim DR_THICKNESS As String Dim DR_REMARKS As String Dim DR_MODEL As String Dim VISIONLT As String Dim GLASS_LOUVER As String Dim DR_FRAME As String Dim DR_FINISH As String Dim WIDTH_DES As String Dim HEIGHT_DES As String Dim VISIONLT_DES As String Dim GLASS_LOUVER_DES As String Dim PAIRORSINGLE As String Dim Ret As Long DR_NUM = DRNUMBOX.Value DR_TYPE = DRTYPEBOX.Value DR_HW = DRHWBOX.Value DR_WIDTH = DRWIDTHBOX.Value DR_HEIGHT = DRHEIGHTBOX.Value DR_THICKNESS = DRTHICKNESSBOX.Value DR_REMARKS = REMARKSBOX.Value DR_MODEL = MODELBOX.Value VISIONLT = VISIONLTBOX.Value GLASS_LOUVER = GLLVBOX.Value DR_FRAME = TUBEBOX.Value DR_FINISH = FINISHBOX.Value If PAIRBOX.Value = True Then PAIRORSINGLE = "PAIR OF " If PAIRBOX.Value = False Then PAIRORSINGLE = "" If DR_WIDTH = "306 mm / 1'-0""" Then WIDTH_DES = "(1'-0"")" If DR_WIDTH = "381 mm / 1'-3""" Then WIDTH_DES = "(1'-3"")" If DR_WIDTH = "457 mm / 1'-6""" Then WIDTH_DES = "(1'-6"")" If DR_WIDTH = "533 mm / 1'-9""" Then WIDTH_DES = "(1'-9"")" If DR_WIDTH = "610 mm / 2'-0""" Then WIDTH_DES = "(2'-0"")" If DR_HEIGHT = "1829 mm / 6'-0""" Then HEIGHT_DES = "(6'-0"")" If DR_HEIGHT = "1981 mm / 6'-6""" Then HEIGHT_DES = "(6'-6"")" If DR_HEIGHT = "2032 mm / 6'-8""" Then HEIGHT_DES = "(6'-8"")" If VISIONLT = "NONE" Then VISIONLT_DES = "" Else VISIONLT_DES = ", " & VISIONLT End If If GLASS_LOUVER = "NONE" Then GLASS_LOUVER_DES = "" Else GLASS_LOUVER_DES = ", " & GLASS_LOUVER End If With Sheets("DOORS").Range("A" & Rows.Count).End(xlUp) .Offset(1).Value = DR_NUM End With With Sheets("DOORS").Range("B" & Rows.Count).End(xlUp) .Offset(1).Value = "TYPE " & DR_TYPE & ", HW# " & DR_HW End With With Sheets("DOORS").Range("C" & Rows.Count).End(xlUp) .Offset(1).Value = PAIRORSINGLE & WIDTH_DES & " x " & HEIGHT_DES & " SPECIAL LITE " & DR_MODEL _ & GLASS_LOUVER_DES & VISIONLT_DES & ", WITH " & DR_FRAME & " TUBE FRAME, " & DR_FINISH End With With Sheets("DOORS").Range("D" & Rows.Count).End(xlUp) .Offset(1).Value = DR_REMARKS End With End Sub Private Sub CommandButton1_Click() Dim answer As Integer answer = MsgBox("DO YOU WANT TO DELETE THE LAST ROW?", vbYesNo + vbQuestion, "REMOVE LAST DOOR") If answer = vbYes Then Lastrow = Sheets("DOORS").Cells(Rows.Count, 1).End(xlUp).Row Range("A" & Lastrow & ":D" & Lastrow).Select Selection.Delete Shift:=xlUp Else 'do nothing End If End Sub Private Sub UserForm_Initialize() With DRWIDTHBOX .AddItem "306 mm / 1'-0""" .AddItem "381 mm / 1'-3""" .AddItem "457 mm / 1'-6""" .AddItem "533 mm / 1'-9""" .AddItem "610 mm / 2'-0""" .AddItem "686 mm / 2'-3""" .AddItem "711 mm / 2'-4""" End With End Sub Private Sub userform_terminate() DOORFORM.Show End Sub 

ALUMFORM还没有卸载,这肯定会造成一些问题。

在ALUMFORM UserForm_Terminate事件中,您正在尝试DOORFORM.Show (您不能同时显示两个Modal用户表单。

您可以通过不使用窗体的事件处理程序尝试Show另一个模态显示窗体来解决此问题。

另外,用Show vbModeless ,而不是卸载它们,做Me.Hide