事件ID通过宏

时间:2012-01-20 13:10:04

标签: excel vba events

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

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

2 个答案:

答案 0 :(得分:3)

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

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

Private WithEvents xlApp As Excel.Application

然后您将在左下拉列表中显示xlApp,在右侧下拉列表中显示事件。选择你想要的那些。

不要忘记在某些时候将xlApp设置为某个位置(例如,ThisWorkbook.Application)。

来自Google的随机阅读:Events And Event Procedures In VBA

答案 1 :(得分:1)

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

您还可以以编程方式将代码添加到每个工作表中 - 如果您想根据工作表名称/索引向不同的工作表添加不同的“触发器”单元格,这可能很有用。

要添加先前问题Data Validation中的Excel Validation List Increase Font Size代码,您可以使用此代码。代码跳过普通代码模块和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