通过macros的事件代码

我有很多Excel工作表(> 700,太多手工更改)和一个macrosxlm,其中包含所有工作表的大部分macros。 我有函数循环遍历所有表单,并执行每个macros中的macros。 由于一个请求,我需要通过中央macros添加一个Eventhandler。 由于我对VBA的理解是事件处理程序只能放在工作表本身的工作表代码文件中,所以我现在不需要做下一步的工作。

我希望有办法做这样的事情?

事件处理程序可以在任何类模块中。

你的插件也有工作表,在其中的一个,你可以放置:

Private WithEvents xlApp As Excel.Application 

然后你将在左边的下拉列表中显示xlApp ,并在右边显示这些事件。 select你想要的。

不要忘了在某些时候将xlApp设置为某些值(例如,指向ThisWorkbook.Application )。

来自Google的随机阅读: VBA中的事件和事件过程 。

如果所有工作表的事件都是相同的,那么使用GSerg提出的Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)方法运行是最有意义的

您也可以通过编程的方式将代码添加到每个工作表 – 如果您想要根据工作表名称/索引将不同的“触发”单元添加到不同的工作表,可能会非常有用。

要添加以前的问题Excelvalidation列表中的数据validation代码增加字体大小,您可以使用它。 代码跳过普通代码模块和ThisWorkbook模块

 Sub DumpCode() Const vbext_ct_document = 100 Dim vbProj As Object Dim vbComp As Object Dim strTxt As String strTxt = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & vbNewLine _ & "If Target.Address = ""$A$2"" Then" & vbNewLine _ & "ActiveWindow.Zoom = 120" & vbNewLine _ & "Else" & vbNewLine _ & "ActiveWindow.Zoom = 100" & vbNewLine _ & "End If" & vbNewLine _ & "End Sub" Set vbProj = ActiveWorkbook.VBProject For Each vbComp In vbProj.vbcomponents If vbComp.Type = vbext_ct_document Then If vbComp.Name <> "ThisWorkbook" Then vbComp.CodeModule.InsertLines vbComp.CodeModule.CountOfLines + 1, strTxt End If Next End Sub