gpt4 book ai didi

excel - 如果以编程方式触发关闭,为什么 VBA Workbook.Close 语句在 Workbook_BeforeClose 中失败?

转载 作者:行者123 更新时间:2023-12-04 07:24:31 28 4
gpt4 key购买 nike

我想用我自己的进程拦截 BeforeClose,并取消默认进程。没有按预期工作。要复制,请创建一个新工作簿,输入以下内容并保存:
这个工作簿模块:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
Application.EnableEvents = False ' to prevent recursively calling this procedure
ThisWorkbook.Close
End Sub
在 Excel 前端,通过单击 close-X 手动关闭工作簿。正如预期的那样,它将通过 ThisWorkbook.Close 语句关闭。在 Excel 2016 和 365 中,如果其他工作簿处于打开状态,它们将保持打开状态。
请注意,EnableEvents 现在将为 false。关闭并重新打开 Excel 以恢复它,或在即时 Pane 中输入:
Application.EnableEvents = True
现在重新打开同一个工作簿。在 Workbook_BeforeClose 上放置一个断点。转到前端并再次手动关闭工作簿。单步执行代码,以确认它在做什么。仍然可以正常工作。
如上所述恢复 EnableEvents。
再次打开文件。转到即时 Pane ,然后输入:
ThisWorkbook.关闭
该文件不会关闭。单步执行代码以查看发生了什么。还是不关。为什么不?

最佳答案

考虑这段代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "Start"
ThisWorkbook.Close
ThisWorkbook.Close
MsgBox "End"
End Sub
这似乎证实了我的评论。
如果 ThisWorkbook.Close可以调用 ThisWorkbook.Close ,这将无限期地向“开始”消息框发送垃圾邮件。
合上书通常会给你 两个 “开始”和 一个 “结尾”
  • 所以它回到 BeforeClose 的开头在 ThisWorkbook.Close第一次,然后忽略它。

  • ThisWorkbook.Close 关闭它给 一个 "开始和 一个 "结束"
  • 因为它忽略了 ThisWorkbook.Close


  • 在这种情况下,从 ThisWorkbook.Close 开始应该让它们始终表现相同。还有这个 不是 案子。
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Close

    ThisWorkbook.Close

    Cancel = True
    Application.EnableEvents = False ' to prevent recursively calling this procedure

    ThisWorkbook.Close
    End Sub
    看看这段代码在用 ThisWorkbook.Close 关闭时是如何执行的:
    enter image description here
    它没有关闭
    然后从菜单中:
    enter image description here
    它关闭
    如果我们不禁用事件,从 ThisWorkbook.Close 运行它行为完全相同。步入,不关闭。
    然而,从菜单上看,它是完全不同的:
    enter image description here
    并且不关闭。
    所以似乎调用 Workbook_BeforeClose使用 ThisWorkbook.Close将忽略所有其他 ThisWorkbook.Close ,但使用菜单关闭文档将尝试运行每个 ThisWorkbook.Close 一次 .

    关于excel - 如果以编程方式触发关闭,为什么 VBA Workbook.Close 语句在 Workbook_BeforeClose 中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68291597/

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