I am trying to build my first excel addin that would initiate a code on close of the workbook once certain condition is met. The condition is checked by the on error go to end.
When I run my addin, it looks like this entire part of code does not get initiated.
This code is currently stored in the ThisWorkbook of the add-in.
Private WithEvents App As Application Private Sub Workbook_Open() Set App = Application End Sub Private Sub App_BeforeClose(Cancel As Boolean) Dim wb1 As Workbook Dim lastrow As Integer On Error GoTo ENDING Application.ScreenUpdating = False Workbooks.Open (ActiveWorkbook.Sheets("ADDIN- DONOTTOUCH").Cells(1.1).Value) Set wb1 = ActiveWorkbook Set ws = wb1.ActiveSheet lastrow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row .....'Other code.... wb1.Save wb1.Close Application.DisplayAlerts = False ActiveWorkbook.Sheets("ADDIN-DONOTTOUCH").Delete Application.DisplayAlerts = True Application.ScreenUpdating = True ENDING: End Sub
You shouldn’t ever be typing event handler procedure signatures by hand.
Private WithEvents App As Application
WithEvents variable adds an
App entry in the code pane’s left-hand dropdown:
Select it. Now expand the right-hand dropdown…
When you select a member in the RHS dropdown, the VBE automatically creates the handler procedure for you, and it is guaranteed to be valid and well-formed. Whereas if you type them from memory, a mistake in parameter ordering can cause a lot of grief.
In any case, the
Excel.Application object does not expose a
BeforeClose event, so while your procedure looks like an event handler, the LHS dropdown says (General) (instead of an event source object), and the “handler” is never actually invoked.
ThisWorkbook is an add-in, it will be loaded along with Excel, and unless unloaded manually, will be unloaded also along with Excel – so if you handle
ThisWorkbook, then you’ll get to run custom code when Excel closes your add-in – whether because the add-in is being unloaded, or because Excel is shutting down.