我在Microsoft Excel中创建了一个“工作簿”,并在下面插入了三个用户窗体
名称:
主窗体
第一表格
SecondForm
我在“ Workbook_Open”事件中编写了代码,以便在打开我的“ MainForm”时显示
工作簿。我编写的代码如下:
Private Sub Workbook_Open()
MainForm.Show
End Sub
我的“ MainForm”包含两个按钮:
1. OpenFirstFormCommandButton
2. OpenSecondFormCommandButton
每个按钮都有一个click事件,其中隐藏了“ MainForm”,相应的
UserForm显示。
“ MainForm”上的“ OpenFirstFormCommandButton”命令按钮的单击事件
如下:
Private Sub OpenFirstFormCommandButton_Click()
MainForm.Hide
FirstForm.Show
End Sub
触发“ OpenFirstFormCommandButton_Click”事件时,“ MainForm”将隐藏,并且
显示“ FirstForm”。
“ OpenSecondFormCommandButton”命令按钮的单击事件位于
“ MainForm”如下:
Private Sub OpenSecondFormCommandButton_Click()
MainForm.Hide
SecondForm.Show
End Sub
触发“ OpenSecondFormCommandButton_Click”事件时,“ MainForm”会隐藏并
显示“ SecondForm”。
到目前为止,一切都很好。那就是为“ MainForm”编写的所有代码。
让我们看看现在为“ FirstForm”和“ SecondForm”编写的代码。
“ FirstForm”包含仅针对“ UserForm_QueryClose”事件的代码,该事件在
在这种情况下,我们尝试通过显示在右上角的“ X”按钮关闭表单
“ FirstForm”表格。代码如下:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
FirstForm.Hide
MainForm.Show
End Sub
“ UserForm_QueryClose”事件的目标是隐藏“ FirstForm”并显示
“ MainForm”。
“ SecondForm”包含与“ FirstForm”完全相同的逻辑。因此,唯一的代码
“ SecondForm”在“ UserForm_QueryClose”事件中,如下所示:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
SecondForm.Hide
MainForm.Show
End Sub
那就是我们拥有的所有代码。
显然,我正在尝试创建一个主表单,可以从中打开其他表单,如果我关闭了这些其他表单,我想返回我的主表单。这实际上是代码应该执行的操作,但是不幸的是,代码的行为有点滑稽。
当我打开工作簿时,“ MainForm”将按应有的方式打开,因为我已经在“ Workbook_Open”事件中编写了此类代码。当我单击“ OpenFirstFormCommandButton”命令按钮时,“ FirstForm”显示而“ MainForm”隐藏,这也是绝对正常的行为。然后,单击“ FirstForm”右上角的“ X”按钮,结果将隐藏“ FirstForm”,并显示“ MainForm”。到目前为止,还没有有趣的行为。在第二次单击“ MainForm”上的“ OpenFirstFormCommandButton”命令按钮时,情况有所不同。显示“ FirstForm”,隐藏“ MainForm”,这是正常的。当我尝试单击“ FirstForm”的“ X”按钮(第二次)时,尽管“ UserForm_QueryClose”事件中有代码,但“ FirstForm”不会隐藏并且“ MainForm”不会显示确实做到了。
第一个问题是,我该如何克服这个问题?
第二个问题是,为什么要停用该代码?为什么代码不运行?
如果您遇到此问题,或者对如何克服这种情况有任何想法,请给我发消息。
先感谢您。
最佳答案
您在混淆窗口管理器。
默认情况下,.Show()
以模态形式显示表单(也就是说,必须存在与之相对应的另一种形式的形式)。在您的循环设置中,此方法无法正常工作。
将所有形式的所有.Show
替换为.Show vbModeless
。
顺便说一句,您不是在“正确关闭表单”。它们保持加载在内存中,只是不可见。