How can an Excel Add-In respond to events in any worksheet?

梦想的初衷 提交于 2019-11-27 04:33:59

Don't use the New keyword in the dim statement. You're telling it to instantiate the class when it's needed, but then you never refer to it again, so it's never needed. Instead:

Public MySheetHandler As SheetChangeHandler

Sub Auto_Open
   Set MySheetHandler = New SheetChangeHandler
End Sub

That line in the Auto_Open (which runs at startup) will instantiate the class.

Got info from: http://www.bettersolutions.com/vba/events/creating-application-level.htm and tried Dick Kusleika's solution but did not get the class module working. After 2 days of web searching and before give-up I tried this and worked for my. Considering : "workbooks are server-generated SpreadsheetML, which cannot include any VBA code", also my requirements.

I wrote this in my class module named "ApplicationEventClass":

Option Explicit

Public WithEvents ExcelAppEvents As Application

Private Sub Class_Initialize()
     Set ApplicationClass.ExcelAppEvents = Application
End Sub

Private Sub ExcelAppEvents_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Target.Font.ColorIndex = 5
End Sub

And this in my module named "Module1":

Option Explicit

Public ApplicationClass As New ApplicationEventClass

Sub ConnectEventHandler()
      On Error Resume Next
      Set ApplicationClass.ExcelAppEvents = Application
End Sub

Thats it! I hope this work for you too. Obviously only change the text color to blue in any worksheet.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!