Используйте Sub Main в качестве стартового объекта.
Сделайте такой модуль
Option Explicit
Private TerminateDetect As Terminate
Public Sub Main()
Set TerminateDetect = New Terminate
MsgBox "Setup"
End Sub
Тогда ваш класс завершения выглядит следующим образом
Option Explicit
Private Sub Class_Terminate()
MsgBox "I terminated"
End Sub
Тестовый класс, который я сделал, это
Option Explicit
Public Description As String
Public Sub Test()
MsgBox "test"
End Sub
Я сделал форму без ссылок, подобных этой
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
Когда я нажимаю на Command1, я получаю два сообщения, одно для загрузки DLL, а другое для запуска Test. Затем, когда я нажимаю на Command2.
Этот пример довольно грубый, поэтому я надеюсь, что вы поняли.
Краткое описание
Создайте класс TDLLManagement в каждом вашем ActiveX. Поместите свой код инициализации в Class_Initialize, а код завершения в Class_Terminate. Затем пусть Sub Main создаст экземпляр этого класса и назначит переменную частного модуля. Обратите внимание, что если у вас есть какие-либо классы GlobalMultisuse и вы напрямую ссылаетесь на DLL ActiveX, вы хотите выполнить простые тесты, чтобы увидеть, куда загружается DLL.