Страницы: 1
RSS
Запись содержимого окна Immediate или команды Debug.Print в лог
 
Доброго здоровья!  
Задался вопросом. Есть макросы ,в которых используется конструкция  
....  
On Error GoTo sub1  
....  
....  
sub1:  
Debug.Print Err, Err.Number, Err.Description: Resume Next  
....  
Результат выводится в окно Immediate  
Если код закрыт, естественно, отследить сбои невозможно. Вопрос: как собрать всё записанное в лог и сохранить в текстовый файл в папке с файлом Excel? Второй вопрос на грани невозможного: как в тот же лог записать в каком модуле и где именно произошла ошибка?  
Спасибо.
 
При открывании книги откройте текстовый файл и пишите лог туда. При закрытии книги закройте файл.  
Заведите глобальную переменную ProcedureName, в начале каждой процедуры присваивайте этой переменной название процедуры, при ошибке пишите в лог в т.ч. эту переменную.  
 
Еще по теме: http://programmersforum.ru/showthread.php?t=212666
 
если код закрыт , то посмотреть лог можно. вот исправить или добавить, как вы хотите имя процедуры - нет.
Живи и дай жить..
 
Всем спасибо!  
Простите, что не отвечал. В общем, по косточкам:  
можно записать в ячейки ошибки + использовать переменную ProcedureName, + есть замечательная встроенная переменная Erl, но работает она только в том случае, если код пронумерован. Тогда в Debug будет отображаться номер строки, в которой возникла ошибка.  
Теперь трудности с логом. Здесь для меня - темный лес. Есть идея записывать всё в глобальный массив, а затем создавать текстовый файл и выгружать содержимое массива в него, но, поскольку я в них не разбираюсь, то дело будет долгим...  
Еще раз спасибо.
 
По поводу закрытости кода: код закрыт для тех, кто пользуется файлом, но не для меня. Но мне нужен лог работы, чтобы проверить, корректно ли обрабатываются данные в "рабочих условиях"
 
Для добавления/снятия нумерации строк кода можно использовать утилиту MZ-Tools  
 
Для записи в файл можно использовать, например, такую процедуру:  
 
Sub DebugLog(Msg)  
 With ThisWorkbook  
   Shell "cmd /c echo " & Msg & ">>""" & .Path & "\" & .Name & ".log"""  
 End With  
End Sub  
 
Тогда вместо, например, Debug.Print "MyLog test " & Now  
достаточно записать: DebugLog "MyLog test " & Now  
При этом отладочная информация будет дописываться в текстовый файл с таким же именем, что и excel-файл, но с расширением .log
 
ZVI, гениально!!!  
Пронумеровал код, добавил такую строчку:  
-----------  
procedure_Error:  
   ErrorMsg = Now & " " & _  
       "Error " & Err.Number & " (" & Err.Description & _  
       ") in procedure Macro_1 строка " & Erl  
   MsgBox ErrorMsg  
   DebugLog (ErrorMsg)  
Resume Next  
-----------  
То, что нужно!
Страницы: 1
Читают тему
Наверх