如何在Excel中的VBA中正确关闭UserForms,以便我可以在必要时重新打开它们?

时间:2015-10-10 22:17:28

标签: excel-vba vba excel

我创建了一个"工作簿"在Microsoft Excel中,我使用以下

插入了三个UserForms

名:

  1. 的MainForm
  2. FirstForm
  3. SecondForm
  4. 我在" Workbook_Open"中编写了代码。事件,以便我的" MainForm"显示,当我打开我的

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

    Private Sub Workbook_Open()
       MainForm.Show
    End Sub
    

    我的#34; MainForm"包含两个按钮: 1. OpenFirstFormCommandButton 2. OpenSecondFormCommandButton

    每个按钮都有一个点击事件,其中" MainForm"隐藏和相应的

    UserForm显示。

    " OpenFirstFormCommandButton"的点击事件CommandButton位于" MainForm"

    如下:

    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"示出。

    到目前为止一切顺利。这就是为#34; 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
    

    这就是我们拥有的所有代码。

    很明显,我正在尝试使用主表格,我可以从中打开其他表格,如果我关闭其他表格,我想返回主表格。这实际上是代码应该做的,但不幸的是,代码表现得有点滑稽。

    当我打开我的工作簿时,#34; MainForm"打开它应该做的,因为我已经在" Workbook_Open"中编写了这样的代码。事件。当我点击" OpenFirstFormCommandButton" CommandButton," FirstForm"显示" MainForm"隐藏,这也是绝对正常的行为。然后我点击" X"按钮位于" FirstForm"的右上角因此," FirstForm"隐藏和" MainForm"显示。直到现在都没有有趣的行为第二次点击" OpenFirstFormCommandButton" CommandButton位于" MainForm"。 " FirstForm"显示," MainForm"隐藏,这是正常的。当我尝试点击" X" " FirstForm"的按钮(第二次)" FirstForm"不隐藏和" MainForm"虽然在" UserForm_QueryClose"中有代码,但是没有显示。事件,就是这样。

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

    如果您遇到此问题或者您有任何想法如何克服这种情况,请给我发消息。

    提前谢谢。

1 个答案:

答案 0 :(得分:3)

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

默认情况下,.Show()以模态方式显示表单(也就是说,必须有另一个表单相对于该表单是模态的)。在圆形设置中,这不起作用。

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

顺便说一下,你不是“正确关闭表格”。它们仍然在内存中加载,只是不可见。