Есть ли способ вернуть имя функции или процедуры во время выполнения?
В настоящее время я обрабатываю ошибки следующим образом:
Sub foo()
Const proc_name as string = "foo"
On Error GoTo ErrHandler
' do stuff
ExitSub:
Exit Sub
ErrHandler:
ErrModule.ShowMessageBox "ModuleName",proc_name
Resume ExitSub
End Sub
Недавно я испытал одну из моих констант, лежащих ко мне после того, как я обновил имя функции, но не постоянное значение. Я хочу вернуть имя процедуры в обработчик ошибок.
Я знаю, что мне придется взаимодействовать с объектом VBIDE.CodeModule
, чтобы найти его. Я немного выполнил метапрограммирование с помощью библиотеки Microsoft Visual Basic для расширения возможностей приложений, но я не добился успеха в этом во время выполнения. У меня нет моих предыдущих попыток, и прежде чем я выкапываю каблуки, чтобы попробовать это снова, я хочу знать, возможно ли это даже отдаленно.
Вещи, которые не будут работать
- Использование встроенной библиотеки VBA для доступа к стеку вызовов. Этого не существует.
- Реализация моего собственного стека вызовов путем нажатия и вызова имен процедур из массива при входе и выходе из каждого. Это по-прежнему требует, чтобы я передавал имя proc где-то еще как строку.
- Третий инструмент, например vbWatchDog. Это действительно работает, но я не могу использовать сторонний инструмент для этого проекта.
Примечание
vbWatchdog, похоже, делает это, напрямую обращаясь к памяти ядра через вызовы API.