工作表上的按钮启动一个用于打开用户窗体(例如,userform1)的宏。 Userform1是非模态加载的,以便用户使用userform1和工作表(即单击单元格)进行输入。 userform1上有一个按钮,当单击该按钮时,会打开另一个用户窗体(例如,userform2)。 Userform2是模态的。单击userform2上的Cancel按钮可以按原样卸载userform2;但是,由于某种原因,它还卸载了userform1,这是我不想要的。如果我使用userform1模态,那么卸载userform2不会卸载userform1;但是,用户不能再使用(即,点击)工作表中的单元格。我找不到任何能让我了解为什么卸载一个userform卸载两者的信息。
答案 0 :(得分:0)
UserForm2.Show
a = 1'只需再执行一行代码
这样就可以了。至少这对我有同样的问题...
答案 1 :(得分:0)
我很高兴我偶然发现了这个旧线程。
我发现关闭VBA编辑器窗口后问题消失了。您确实必须关闭它,将窗口最小化是不够的。窗口是否在同一屏幕上打开也没关系。只有关闭它才对我有用。我发现,一旦卸载了 Form2 ,VBA编辑器就会显示 Form2 ,无论我使用的是哪个其他代码模块。
我的目的是在TestWorkbook.xlsm(下面的查看代码)中找出问题所在。我在 Form2.Show 之后尝试了 DoEvents 和一行代码的建议,两者都很有帮助。在我的DevelopmentAddIn.xlam中,它们没有帮助,第一个窗体仍然关闭。因此问题仍然可能出在我的AddIn的更复杂的代码中。
但是就像我说的那样,尽管我仍然不明白为什么,但是关闭VBA编辑器窗口确实可以解决问题。
TestWorkbook.xslm (两个用户窗体 Form1 和 Form2 和代码模块 mLoad )
mLoad:
Option Explicit
Public Changed As Integer
'***Load the 1st form
Public Sub LoadFirstForm()
Load Form1
'allow user to change the active workbook
Form1.Show vbModeless
End Sub
'***Load a 2nd form (from Form1)
Public Sub LoadSecondForm()
Dim a As Integer
Load Form2
'continue after 2nd form closes
Form2.Show vbModal
'suggestions
a = 1
DoEvents
'2nd form was changed
If Changed = 1 Then
Form1.InfoBox.Value = "Changed"
'process changes
'2nd form is unchanged
Else
Form1.InfoBox.Value = "Unchanged"
End If
End Sub
Form1 (带有按钮 cmdLoad 和文本框 InfoBox )
'***Load the 2nd form (from Form1)
Private Sub cmdLoad_Click()
LoadSecondForm
End Sub
Form2:(带有按钮 cmdOK )
Option Explicit
'***Initial status is 'unchanged'
Private Sub UserForm_Initialize()
Changed = 0
End Sub
'***Status is 'changed'
Private Sub cmdOk_Click()
Changed = 1
'close 2nd form and continue
Unload Me
End Sub