gpt4 book ai didi

vba - Excel 加载项如何响应任何工作表中的事件?

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

我们的工作簿是服务器生成的 SpreadsheetML,它不能包含任何 VBA 代码。不幸的是,创建 native Excel 文件或 Excel 2007 XML 文件也不是一个选项。

因此,我有一个 Excel 插件(VBA,而不是 XLL),我们的每个用户都安装它来添加我们的工作簿需要的一些额外的 UDF 等。

这很好用,但现在我需要一个宏,每次用户更改任何单元格中的文本时都需要执行该宏,无论他们当时正在使用什么工作簿。 p>

到目前为止,我已在外接程序中创建了一个新的类模块 (SheetChangeHandler),其中包含以下代码:

Option Explicit
Private WithEvents App As Application

Private Sub Class_Initialize()
Set App = Application
End Sub

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Debug.Print "Changed"
On Error GoTo Finish
App.EnableEvents = False
DoWorkOnChangedStuff Sh, Source
Finish:
App.EnableEvents = True
End Sub

在我的外接程序中,我添加了一行来实例化新类:

Public MySheetHandler As New SheetChangeHandler

我的理解是,这应该使 Excel 为所有打开的工作簿发送加载项所有 SheetChange 事件,而这些工作簿不需要包含任何宏代码。

但它不起作用...没有调试行,并且当我更改任何工作表上的单元格时,不会调用我的 DoWorkOnChangedStuff 代码。

有什么想法吗?

最佳答案

请勿在 dim 语句中使用 New 关键字。您告诉它在需要时实例化该类,但随后您再也不会引用它,因此永远不需要它。相反:

Public MySheetHandler As SheetChangeHandler

Sub Auto_Open
Set MySheetHandler = New SheetChangeHandler
End Sub

Auto_Open 中的那一行(在启动时运行)将实例化该类。

关于vba - Excel 加载项如何响应任何工作表中的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/858691/

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