Получить программно название процедуры

Программирование на Visual Basic for Applications
Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Получить программно название процедуры

Сообщение Евгений Д. » 07.10.2005 (Пт) 14:08

Коллеги, кто знает, как программно получить название процедуры в коде внутри нее? И возможно ли это?

Т.е., например, надо что-то вроде:

Код: Выделить всё
Function Test(...)
    ....
    if ... then
       msgbox "Ошибка в функции", vbExclamation + vbOKOnly,  ProcName
    end if
    ....
end Function


где ProcName = "Test"

Вопрос, а как "залить" значение "Test" в ProcName?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.10.2005 (Пт) 14:11

В каждой процедуре первой строкой написать const ProcName as string = "ProcName".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 07.10.2005 (Пт) 15:18

Т.е. только ручками? Программно никак?

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 07.10.2005 (Пт) 16:29

а ты не знаешь какая процедура с какой кнопкой связана? :lol:
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Евгений Д.
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 21.09.2004 (Вт) 17:32
Откуда: Москва

Сообщение Евгений Д. » 07.10.2005 (Пт) 16:52

На самом деле кнопок никаких нет. Просто я хочу написать "универсальную" функцию сообщений об ошибках, например, при помощи обычного MsgBox, в заголовке окна которого была бы фраза вида "Ошибка в процедуре 'Название процедуры' ", где 'Название процедуры' и есть имя процедуры (Sub или Function), вызвавшей данную фукцию сообщения об ошибке.
Просто "ломает" каждый раз явно писать название процедуры или заводить константы, а хочется иметь что-то типа Me.Name.

Кстати аналогичный вопрос о названии модуля или названии проекта, в котором "лежит" вызывающая процедура.

pshik
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 23.07.2005 (Сб) 18:57

Сообщение pshik » 07.10.2005 (Пт) 19:03

Exit_ToExcel:
DoCmd.Hourglass False
Exit Sub

Err_ToExcel:

If Err.Number = 13 Then
Err.Clear
GoTo Exit_ToExcel
ElseIf Err.Number = 3734 Then

MsgBox "There is a system error. Close program and try again"
Err.Clear

Else
MsgBox Err.Number & " " & Err.Description & " [ExcelForceIn]"
GoTo Exit_ToExcel
End If
DoCmd.Hourglass False

Mech
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 07.02.2006 (Вт) 20:37
Откуда: г. Лобня

Сообщение Mech » 02.05.2006 (Вт) 20:46

Интересная статейка
определить не только процедуру, но и номер строки
http://access.boom.ru/Library/Algoritms ... cedure.htm

smaharbA
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 16.06.2005 (Чт) 5:08

Сообщение smaharbA » 02.05.2006 (Вт) 23:59

Sub proc()
On Error GoTo proc_err
a = 1 / 1
a = 1 / 0
Exit Sub
proc_err: MsgBox msg_err("proc_err:")
End Sub

Function msg_err(se)
s = Split(VBE.CodePanes(1).CodeModule.Lines(1, VBE.CodePanes(1).CodeModule.CountOfLines), vbCrLf)
pr = ""
err_proc = ""
i = 1
For Each c In s
If InStr(c, se) = 1 Then
err_proc = Err.Description & " in <" & pr & ">"
Exit For
End If
If InStr(LCase(c), "sub ") > 0 Or InStr(LCase(c), "function ") > 0 Then
pr = c
End If
i = i + 1
Next
If err_proc <> "" Then msg_err = err_proc
End Function
///
Но это тоже что и завести константы почти
Я конечно далек от мысли...(с)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList