Use Sub Main as your start up object.
Make a module like this
Option Explicit
Private TerminateDetect As Terminate
Public Sub Main()
Set TerminateDetect = New Terminate
MsgBox "Setup"
End Sub
Then your terminate class looks like this
Option Explicit
Private Sub Class_Terminate()
MsgBox "I terminated"
End Sub
A test class I made is this
Option Explicit
Public Description As String
Public Sub Test()
MsgBox "test"
End Sub
I made a form with no references like this
Option Explicit
Private O As Object
Private Sub Command1_Click()
Set O = CreateObject("TestUnload.Dummy")
O.Test
End Sub
Private Sub Command2_Click()
Set O = Nothing
End Sub
When I click on Command1 I get two message one for loading up the DLL and another for running Test. Then when I click on Command2.
This example is rather crude so I hope you get the point.
Summary
Make a TDLLManagement Class in every ActiveX you have. Put your Initialize Code in Class_Initialize and your Terminate code in Class_Terminate. Then have a Sub Main create a instance of that class and assign to a private module variable. Note if you have any GlobalMultisuse classes and directly reference the ActiveX DLL you want to do simple tests to see where the DLL loads.