【问题标题】:Why does Macro Enabled Excel Workbook kill UserForm in another Macro Enabled Excel Workbook when closed?为什么启用宏的 Excel 工作簿在关闭时会杀死另一个启用宏的 Excel 工作簿中的用户窗体?
【发布时间】:2018-03-06 23:12:08
【问题描述】:

场景: 用户正在运行启用宏的 Excel 工作簿。用户单击用户窗体上的链接,该链接启动另一个启用宏的 Excel 工作簿,该工作簿也具有用户窗体。然后使用以下代码关闭第二个工作簿:

Private Sub btnExit_Click()

'Check if other Excel files are open before quitting the application
If Workbooks.Count = 1 Then
    Application.Quit
Else
    ThisWorkbook.Close
End If

End Sub

还有……

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim intResponse As Integer

If MsgBox("Are you sure you would like to exit the calculator?", vbYesNo + vbQuestion) = vbNo Then
    Cancel = True
End If

ThisWorkbook.Saved = True

End Sub

在关闭第二个工作簿 (ThisWorkbook.Close) 时,原始工作簿保持打开状态,但是,之前可见的 vbModeless 用户窗体已被杀死。还应该提到第二个工作簿的表单是模态的。

如果使用右上角的 Excel 退出按钮关闭第二个 Workbook,则不会出现此问题。

有人知道为什么会这样吗?是因为以编程方式关闭工作簿时 Excel.Application 的代码执行停止了吗?会不会是因为表单模式的不同?除了在工作表中的原始工作簿上放置一个按钮以重新启动用户窗体之外,还有其他解决方法吗?

非常感谢您对此问题的任何帮助! CiViCChiC79

【问题讨论】:

    标签: vba excel userform


    【解决方案1】:

    这是正在发生的事情:

    • 假设两个工作簿都在同一个 Excel 应用程序中,Application.Quit 将关闭它们。

    • ThisWorkbook.Close 将关闭代码所在的工作簿。

    因此,关于您的问题 - 您没有关闭带有 ThisWorkbook.Close 的第二个工作簿,而是关闭了具有您单击的 btnExit 按钮的工作簿。我猜这两个工作簿都非常相似,你弄错了你要关闭哪一个?

    【讨论】:

    • 请重新阅读我的帖子,这并不能回答我的问题。但我已经找到了解决方案。谢谢!
    • OP 询问的是用户窗体关闭而不是工作簿(“原始工作簿保持打开状态,但是先前可见的 vbModeless 用户窗体已被杀死”)。另外,我认为很明显 OP 了解 Application.QuitThisWorkbook.Close 的工作原理。
    【解决方案2】:

    将包含退出按钮的第二个工作簿的表单更改为 vbModeless 解决了问题!!!!耶!!!!!!

    【讨论】:

    • 您可能想扩展您的答案。
    • 第一个工作簿中的表单是非模态的,第二个工作簿中的表单是模态的。我将第二种形式更改为无模式,问题已得到纠正。这意味着当我使用退出按钮关闭第二个工作簿时,第一个工作簿中显示的用户窗体没有被杀死。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多