Excel 用户窗体在重新启动后冻结

Excel 用户窗体在重新启动后冻结,excel,vba,Excel,Vba,我的第一个用户表单叫做DOORFORM。它有三个按钮可以打开三个不同的用户窗体。用户将单击其中一个按钮,它将打开一个相应的用户窗体 在这种情况下,让我们假设他点击AlumDBTN,它打开UserFormALUMFORM 填写表单后,用户单击ADDBTN,然后关闭ALUMFORMDOORFORM在关闭ALUMFORM时自动显示(与其他两个表单相同) 然后,用户再次单击ALUMDRBTN并填写UserForm。这一次,当用户单击ADDBTN Excel时,Excel将冻结,关闭它的唯一方法是使用任务

我的第一个用户表单叫做DOORFORM。它有三个按钮可以打开三个不同的用户窗体。用户将单击其中一个按钮,它将打开一个相应的用户窗体

在这种情况下,让我们假设他点击AlumDBTN,它打开UserFormALUMFORM

填写表单后,用户单击ADDBTN,然后关闭ALUMFORMDOORFORM在关闭ALUMFORM时自动显示(与其他两个表单相同)

然后,用户再次单击ALUMDRBTN并填写UserForm。这一次,当用户单击ADDBTN Excel时,Excel将冻结,关闭它的唯一方法是使用任务管理器

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

门框:

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
铝模板:

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\u Terminate
事件中,您正在尝试
DOORFORM.Show
(您不能同时显示两个
Modal
用户表单)

您可能可以通过不使用表单的事件处理程序尝试显示另一个模式显示的表单来解决此问题


或者,使用
Show vbModeless
显示表单,而不是卸载它们,而是执行
Me.Hide

ALUMFORM尚未卸载,这肯定会导致一些问题

在ALUMFORM
UserForm\u Terminate
事件中,您正在尝试
DOORFORM.Show
(您不能同时显示两个
Modal
用户表单)

您可能可以通过不使用表单的事件处理程序尝试显示另一个模式显示的表单来解决此问题


或者,使用
Show vbModeless
显示表单,而不是卸载表单,而是执行
Me.Hide

可以显示ADDBNT中的代码吗?嘿,Marco,ADDBTN代码是ALUMFORM中的第一个子项。没有“UserForm\u Initialize”?同样在VBA中,
Dim A,B As String
不构成字符串类型。在
DOORFORM上放置断点。在_terminateevent handler中显示
语句,首先确认代码是否达到了这个程度:)谢谢大家,@PatricK,我应该在UserForm_Initialize中输入什么代码,这应该在我的两个UserForm中都输入吗?同样为了声明我的变量,我应该输入Dim A作为String,Dim B作为String,等等…这是冻结我的程序的原因吗?你能显示ADDBNT中的代码吗?嘿,Marco,ADDBTN代码是ALUMFORM中的第一个子代码。在这里没有“UserForm\u Initialize”吗?同样在VBA中,
Dim A,B As String
不构成字符串类型。在
DOORFORM上放置一个断点。在_terminate事件处理程序中显示
语句,首先确认代码是否达到了这样的程度:)谢谢大家,@PatricK,我应该在UserForm\u Initialize中放置什么代码,这应该在我的两个用户表单中吗?同样为了声明我的变量,我应该将其输入到Dim A作为字符串,Dim B作为字符串,等等。。。这就是冻结我节目的原因吗?