【问题标题】:VBA Addins: Events do not workVBA 插件:事件不起作用
【发布时间】:2012-05-06 08:46:08
【问题描述】:

我只想在所有工作簿(有或没有宏)中捕获打开和保存事件。 据我了解,我需要带有启用 Event 的代码的 AddIn。我在互联网上找到了很多例子。我学习了 stackoverflow 的例子,比如这里:How can an Excel Add-In respond to events in any worksheet? 但它只是不起作用。没有人报告任何问题。所以,我想我在这里犯了一个简单的错误。 我有下一个插件,例如:

类模块 (ExcelEventCapture) - 私有:

Option Explicit
Public WithEvents ExcelApp As Excel.Application

Private Sub Class_Initialize()
Set ExcelApp = New Excel.Application
ExcelApp.EnableEvents = True
MsgBox "ExcelApp OK"
End Sub

Private Sub ExcelApp_NewWorkbook(ByVal Wb As Workbook)
Wb.Close savechanges:=False
MsgBox "Sorry - you can't create workbooks in this system!"
End Sub

此代码放在 ThisWorkbook 中:

Option Explicit
Private ExcelEvents As ExcelEventCapture
Private Sub Workbook_Open()
Set ExcelEvents = New ExcelEventCapture
MsgBox "ExcelEvents OK"
End Sub

每次保存/修改此代码后,我都会使用插件管理器来关闭/打开此插件。打开后,我看到“ExcelApp OK”、“ExcelEvents OK”。但是当我创建新工作簿时,不会发生任何事件。其他事件也不处理。我用 2007/2010 Excel 试试。结果一样。 请帮忙。

【问题讨论】:

  • 我不完全确定,但您为什么要实例化“新 Excel 应用程序”而不是 Set ExcelApp = Excel.Application。此外,您可以在 Auto_Open() 中实例化 AddIn 本身中的类。

标签: excel excel-addins vba


【解决方案1】:

你的代码不太对:

类模块(ExcelEventCapture)

Option Explicit

Public WithEvents ExcelApp As Application

Private Sub ExcelApp_NewWorkbook(ByVal Wb As Workbook)
    Wb.Close savechanges:=False
    MsgBox "Sorry - you can't create workbooks in this system!"
End Sub

此代码放在 ThisWorkbook 中:

Option Explicit

Private ExcelEvents As New ExcelEventCapture

Private Sub Workbook_Open()
    Set ExcelEvents.ExcelApp = Application
    MsgBox "ExcelEvents OK"
End Sub

【讨论】:

  • 致克里斯·尼尔森:感谢您的回答。正如你在这里写的那样,我更正了我的文字。我还评论了 Class_Initialize 方法(正确吗?)。我见过“ExcelEvents OK”。但事件仍然不起作用。
  • 我已经运行了发布的代码,它确实对我有用。 Class_Initialise 中的代码不是必需的。在 Excel 2010 上测试
  • 对不起,我有一个错误:ExcelEvents.ExcelApp = new Application。当“新”被删除时,一切都变得正常了。这不是错字。我真的不明白我在做什么。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 2019-03-28
相关资源
最近更新 更多