Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.04.2008, 08:26   #1
XPAiN
Форумчанин
 
Аватар для XPAiN
 
Регистрация: 31.10.2007
Сообщений: 108
По умолчанию Обработчик ошибок

Допустим есть некоторый обработчик ошибок в VBA; мне необходимо чтобы при появлении некой ошибки в коде я узнавал в каком модуле , в какой процедуре , в какой строчке кода это произошло. Помогите плз кто знает как. Заранее благодарен.
delphi is my world
XPAiN вне форума
Старый 18.04.2008, 13:11   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Могу лишь посоветовать метод, как узнать имя модуля, в котором произошла ошибка. Можно сделать так:
Перед каждым перехватом ошибки (перед On Error...) вставить какой-нибудь идентификатор (в предложенном коде это строковая переменная Ident) и в коде обработки ошибки выполнить предложенную подпрограмку.
Код:
Dim Ident As String
    Ident = "Identifikator_1"
    Call Poisk(Ident)
    MsgBox Ident ' Теперь это имя модуля в котором произошла ошибка
    '
    '
    '
Private Sub Poisk(Ident)

    Dim CompName As Object, ModulName As String
    For Each CompName In ThisWorkbook.VBProject.VBComponents
        With CompName.CodeModule
            If .Find(Ident, 1, 1, .CountOfLines, 1) = True Then
                Ident = CompName.Name
                Exit For
            End If
        End With
    Next

End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 20.04.2008, 16:30   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А если в качестве идентификатора использовать имя процедуры и номер вхождения оператора On Error в эту процедуру, то очень просто получить имя модуля и имя самой процедуры:
Код:
Sub IfErrorIsTrue()

    Dim Ident As String
    Ident = "Procedure: Macro1()_1" 'Имя процедуры и номер оператора On Error
    Call Poisk(Ident) 'Две последние строки вставить в код обработки при возникновении ошибки

End Sub
Sub Poisk(Ident)

    Dim CompName As Object, ModulName As String, Nm As String
    For Each CompName In ThisWorkbook.VBProject.VBComponents
        With CompName.CodeModule
            If .Find(Ident, 1, 1, .CountOfLines, 1) = True Then
                Nm = CompName.Name
                Exit For
            End If
        End With
    Next
    
'Для примера, выведем сообщение, содержащее имя модуля и имя процедуры
'в которой произошла ошибка. Что нужно с этими данными делать на
'самом деле - Вам виднее.

    MsgBox "Module: " & Nm & vbCrLf & Ident

End Sub
Получить номер строки я пока не пробовал.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 21.04.2008, 09:30   #4
XPAiN
Форумчанин
 
Аватар для XPAiN
 
Регистрация: 31.10.2007
Сообщений: 108
По умолчанию

Спасибо Попробую
delphi is my world
XPAiN вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический обработчик события SKYDOS Помощь студентам 2 11.04.2008 06:46
Обработчик ошибок. Dj_smart Общие вопросы Delphi 17 30.03.2008 11:58
обработчик событий ben95 Помощь студентам 5 28.01.2008 17:46
Свой обработчик ошибок для TImage Aslan Мультимедиа в Delphi 8 29.11.2007 11:54
Обработчик события... Flash_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 12.03.2007 21:24