То, что вы хотите сделать, технически выполнимо, но вы уверены, что хотите добавить шаблонный код с жестко закодированными строками во все ваши процедуры?Это большое обслуживание, которое также усложняет рефакторинг вашего кода.Я видел много сообщений об ошибках, в которых говорилось, что это от «Foo», но они пришли от «Bar», потому что в какой-то момент код был в Foo, но затем он был перемещен или переименован в Bar, но они забыли обновить строковую константу.Нет таких гарантий, что строковые константы синхронизированы с фактическими именами процедур.
Прежде чем потратить на это решение несколько часов, я бы посоветовал вам сначала рассмотреть сторонние надстройки, которые могут гораздо лучше помочь вам получить подробный вывод ошибок, в котором вы нуждаетесь.Одним из таких решений будет vbWatchDog , который предоставляет вам не только трассировку стека, но и значительно расширенную диагностику ... без любых изменений в вашем исходном коде.Именно потому, что он может обойтись без каких-либо встроенных констант, он не будет предоставлять вам устаревшую информацию.
Следует отметить, что есть и другие сторонние надстройки, такие как MZ-Tools , которые предоставляют кнопку одним щелчком мыши для добавления шаблона ошибки, который можно использовать для предоставления того, что вы хотите,Однако операция необратима, что увеличивает нагрузку на обслуживание;изменение процедуры будет означать, что вам придется удалить старый шаблон ошибки, затем повторно добавить, и, если есть какая-либо настройка, добавить его заново.
Если, несмотря ни на что, вы настаиваете на том, чтобы продолжать делать это своими руками, вы можете сделать что-то вроде следующего:
Public Sub AddBoilerPlate(TargetComponent As VBIDE.VBComponent)
Dim m As VBIDE.CodeModule
Dim i As Long
Set m = TargetComponent.CodeModule
For i = m.CountOfDeclarationLines + 1 To m.CountOfLines
Dim ProcName As String
Dim ProcKind As VBIDE.vbext_ProcKind
ProcName = m.ProcOfLine(i, ProcKind)
Dim s As Long
s = m.ProcBodyLine(ProcName, ProcKind) + 1
m.InsertLines s, <your push code>
'Loop the lines within the procedure to find the End *** line then insert the pop code
Next
End Sub
Это неполный образец, проверки не выполняютсядля уже существующего шаблона.Более полный пример, вероятно, удалит любой предыдущий шаблон перед вставкой.