当Windows挂钩处于活动状态时,如何防止Excel因错误而崩溃?

ing*_*rus 5 excel winapi vba excel-vba

我正在使用setWindowHookEx,它工作正常:

Private HookHandle As LongPtr

Sub RemoveHook()
    UnhookWindowsHookEx HookHandle
End Sub

Sub SetHook()
    Dim lThreadID As LongPtr
    lThreadID = GetCurrentThreadId
    HookHandle = SetWindowsHookEx(WH_MOUSE, AddressOf foo, 0, lThreadID)
End Sub

Public Function foo(ByVal nCode As LongPtr, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
    foo = CallNextHookEx(0, nCode , wParam, lParam)
End Function
Run Code Online (Sandbox Code Playgroud)

我的问题是:当任何未处理的错误(来自任何其他宏)发生,并且我必须结束宏时,Excel崩溃并死亡.(我猜,那个钩子还活着,但是foo函数不再存在于内存中)

有没有办法防止Excel崩溃?

我在很多模块中使用它,我不想在任何地方进行错误处理.