gpt4 book ai didi

excel - Sub App_WorkbookBeforeSave 不适用于 VBA 加载项/Excel 2010

转载 作者:行者123 更新时间:2023-12-03 03:01:34 25 4
gpt4 key购买 nike

我将在保存工作簿之前显示一个MessageBox。我尝试过使用事件处理程序 Sub App_WorkbookBeforeSave()Sub Workbook_BeforeSave 但两者都不起作用!为什么?

addin 中有我的 Sub:

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "Good bye! Data is save."
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "Good bye! Data is save."
End Sub

更新

我将它们放在属于 Microsoft Excel 对象ThisWorkbook 模块中

最佳答案

这种功能需要...

  • 加载项的 ThisWorkbook 模块中的代码,
  • 使用类来保存事件处理代码,同时仍然在 ThisWorkbook 模块中启动它

无论哪种方式,您都需要创建一个 WithEvents 应用程序对象的实例,虽然您在创建该对象后不直接触摸该对象,但它可以捕获事件。

我喜欢第二个选项(更干净,让你看起来像老板,等等)。创建一个类并为其命名。我喜欢将我的类称为ImAGoodListener。在类中,为您想要使用的任何应用程序事件包含适当的 Subs

Public WithEvents App As Application

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
MsgBox "Good bye!"
End Sub

通过参数,您可以做一些很酷和恶作剧的事情,例如阻止保存工作簿...

(我喜欢On Error Resume Next,这样如果我们的代码出现问题,我们就不会冒不允许用户保存他/她的工作簿的风险)

ThisWorkbook模块中放置类似这样的内容...

Dim objAppLis As New ImAGoodListener

Private Sub Workbook_Open()
Set objAppLis.App = Application
End Sub

这将在您的加载项首次打开时启动事件监听。

或者,如果您将 CustomUI 用于功能区,则可以使用 Ribbon Onload 事件来触发监听的开始(当我的事件主要用于功能区行为时,我会执行此操作,以便我可以轻松地在 CustomUI xml 中禁用监听)。

其他一些使用的应用程序事件是:

  • App_SheetActivate
  • App_WorkbookActivate
  • App_WorkbookOpen
  • App_WorkbookBeforeClose
  • App_WorkbookBeforeSave

这是一个 list of all events ,但请注意,其中一些是工作簿(事件处理程序以 Workbook_ 事件开头,这不适用于此类事情。

Chip 在他的网站上详细介绍了此类事件 here

关于excel - Sub App_WorkbookBeforeSave 不适用于 VBA 加载项/Excel 2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595575/

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