gpt4 book ai didi

excel - 如何在 Excel 中的 VBA 中正确关闭用户窗体,以便在必要时可以重新打开它们?

转载 作者:行者123 更新时间:2023-12-02 21:50:53 25 4
gpt4 key购买 nike

我在 Microsoft Excel 中创建了一个“工作簿”,并插入了三个具有以下内容的用户窗体

姓名:

  1. 主窗体
  2. 第一表格
  3. 第二形式

我在“Workbook_Open”事件中编写了代码,以便当我打开我的“MainForm”时显示

工作簿。我写的代码如下:

Private Sub Workbook_Open()
MainForm.Show
End Sub

我的“MainForm”包含两个按钮:1. 打开FirstForm命令按钮2. OpenSecondFormCommandButton

每个按钮都有一个点击事件,其中“MainForm”隐藏以及相应的

用户表单显示。

“MainForm”上的“OpenFirstFormCommandButton”CommandButton 的单击事件

如下:

Private Sub OpenFirstFormCommandButton_Click()
MainForm.Hide
FirstForm.Show
End Sub

当触发“OpenFirstFormCommandButton_Click”事件时,“MainForm”隐藏,

显示“FirstForm”。

“OpenSecondFormCommandButton”CommandButton 的点击事件

“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”并显示

“主窗体”。

“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”按钮(第二次)时,“FirstForm”不会隐藏,“MainForm”也不会显示,尽管“UserForm_QueryClose”事件中有代码,其中正是这样做的。

第一个问题是,我该如何克服这个问题?第二个问题是,为什么代码被停用了?为什么代码不运行?

如果您遇到过这个问题,或者您有任何解决办法,请给我留言。

提前谢谢您。

最佳答案

你让窗口管理器感到困惑。

默认.Show()以模态方式显示一个表单(也就是说,必须存在另一个相对于该表单将是模态的表单)。在您的循环设置中,这效果不佳。

将所有表单中的所有 .Show 替换为 .Show vbModeless

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

关于excel - 如何在 Excel 中的 VBA 中正确关闭用户窗体,以便在必要时可以重新打开它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com