|
|||||||
Обработка ошибок
Время создания: 31.07.2019 22:53
Текстовые метки: VBA, Error
Раздел: Разные закладки - VBA - VBA управление кодами
Запись: xintrea/mytetra_db_adgaver_new/master/base/1506419979zdwg8x2b3y/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
& vbCrLf & 'Как из sub или function узнать ее имя? Dim startline As Long, startcolumn As Long, endline As Long, endcolumn As Long Dim CurrentProc With Application.VBE.ActiveCodePane .GetSelection startline, startcolumn, endline, endcolumn CurrentProc = .CodeModule.ProcOfLine(startline, 0) 'vbext_pk_Proc) End With Debug.Print CurrentProc '====================================================== '====================================================== 'Пример универсального обработчика ошибок. Sub Указание_номера_строки_ошибки2() Dim i As Long, j As Long
On Error GoTo error_handler
i = 10 'MsgBox "Деление на ноль!!!" Debug.Print i \ j
exit_statements: Exit Sub
error_handler: '====================================================================================== Dim startline As Long, startcolumn As Long, endline As Long, endcolumn As Long VBE.ActiveCodePane.GetSelection startline, startcolumn, endline, endcolumn
MsgBox "МОДУЛЬ " & Chr(13) & VBE.ActiveCodePane.CodeModule.Name & Chr(13) & Chr(13) & "ПРОЦЕДУРА " & Chr(13) & _ VBE.ActiveVBProject.VBComponents(VBE.ActiveCodePane.CodeModule.Name).CodeModule.ProcOfLine(startline, 0) & Chr(13) & _ Chr(13) & "ОШИБКА " & Chr(13) & Err.Description & "(" & Err.Number & ")", vbCritical, "ПРОЕКТ " & CurrentProject.Name & _ " (" & ver_Module & ")"
Resume exit_statements '====================================================================================== End Sub
'================================================================== Не знаю, как добиться этого во время исполнения, но вот накатать процедурку, которая просканирует все строки всех VBComponent'ов (модулей кода) в поисках вызова процедуры отчета о времени исполнения с автозаменой на имя содержащей вызов подпрограммы - тоже спасение от лени Можно использовать ту же: strProcName = SomeWorkbook.VBProject.VBComponents(i).CodeModule.ProcOfLine(j, vbext_pk_Proc) Вот она, заветная процедурка по замене шаблонов %ProcName% внутри строк на имя процедуры или функции, в которой находится это выражение: Option Explicit
Sub Test() s = "%ProcName%" End Sub
Sub ReplaceByTemplate() Dim i As Long, j As Long, wbk As Workbook, s As String
Set wbk = ThisWorkbook
For i = 1 To wbk.VBProject.VBComponents.Count For j = 1 To wbk.VBProject.VBComponents(i).CodeModule.CountOfLines s = wbk.VBProject.VBComponents(i).CodeModule.Lines(j, 1) If InStr(1, s, "%" & "ProcName" & "%", vbTextCompare) > 0 Then s = Replace(s, "%" & "ProcName" & "%", wbk.VBProject.VBComponents(i).CodeModule.ProcOfLine(j, vbext_pk_Proc)) Call wbk.VBProject.VBComponents(i).CodeModule.ReplaceLine(j, s) End If Next j Next i
Set wbk = Nothing End Sub |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|