我在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

顺便说一句,您不是在“正确关闭表单”。它们保持加载在内存中,只是不可见。

09-28 12:50