我有很多Excel工作表(> 700,太多手工更改)和一個宏xlm,它包含所有工作表的大部分宏。我有函數循環遍歷所有表單並在每個表單中執行宏。由於請求我需要通過中央宏添加一個Eventhandler。由於我對VBA的理解是事件處理程序只能放置在工作表本身的工作表代碼文件中,因此我現在不會接下來做什麼。通過宏的事件代碼
我希望有辦法做這樣的事情?
我有很多Excel工作表(> 700,太多手工更改)和一個宏xlm,它包含所有工作表的大部分宏。我有函數循環遍歷所有表單並在每個表單中執行宏。由於請求我需要通過中央宏添加一個Eventhandler。由於我對VBA的理解是事件處理程序只能放置在工作表本身的工作表代碼文件中,因此我現在不會接下來做什麼。通過宏的事件代碼
我希望有辦法做這樣的事情?
事件處理程序可以在任何類模塊中。
你的插件也有表,在其中的一個,你可以放置:
Private WithEvents xlApp As Excel.Application
然後你會在左側下拉菜單,並在正確的事件有xlApp
。選擇你想要的。
不要忘記設置xlApp
某些事情(例如,到ThisWorkbook.Application
)。
從Google隨機閱讀:Events And Event Procedures In VBA。
如果事件是對所有工作表相同,則與Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
方法,通過GSerg建議運行是最有意義的
您也可以將代碼添加到每個表編程 - 如果你想添加不同的,這可能是有用的根據表格名稱/索引將「單元格」觸發到不同的工作表。
要添加您之前的問題Excel Validation List Increase Font Size中的Data 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
這是否也適用於非應用程序事件?例如,如果所選單元格被更改。 – TheJoeIaut
@TheJoeIaut是的。 +1 – brettdj
它的工作!謝謝! – TheJoeIaut