С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/68: Рейтинг темы: голосов - 68, средняя оценка - 4.76
102 / 20 / 0
Регистрация: 02.07.2012
Сообщений: 149

Как получить имя текущей процедуры или функции?

29.01.2014, 04:38. Показов 14442. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Прошерстив просторы интернета не нашел каким образом можно получить имя текущей процедуры или функции?
Все что есть, это возврат имени текущего модуля - Application.VBE.ActiveCodePane.CodeModul e.Name (малавато)
..........В окне watches этот функционал (текущий модуль и процедура) очень хорошо реализован

Нужно для обработчика ошибок, хелп плиз
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2014, 04:38
Ответы с готовыми решениями:

Как получить имя текущей ячейки в Excel?
Подскажите, как получить имя текущей ячейки (определенное мной). Или как добраться до списка именованных ячеек. Заранее большое...

Имя процедуры/функции
Как из sub или function узнать ее имя?

Как вызвать из процедуры текущей записи, процедуру открытия формы
Доброго времени суток! Возникла необходимость в процедуре Form_Current() обратиться к процедуре Form_Open(Cancel As Integer). Причём в...

17
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
29.01.2014, 04:58
Стек вызовов вложенных подпрограмм
0
102 / 20 / 0
Регистрация: 02.07.2012
Сообщений: 149
29.01.2014, 20:57  [ТС]
.......там ответа не нашел

Добавлено через 7 часов 4 минуты
Решение очень близко. Вот пример выводимого сообщения:
Visual Basic
1
2
3
MsgBox "МОДУЛЬ " & Chr(13) & Application.VBE.ActiveCodePane.CodeModule.Name & Chr(13) & Chr(13) & "ПРОЦЕДУРА " & Chr(13) & _
Application.VBE.ActiveVBProject.VBComponents(Application.VBE.ActiveCodePane.CodeModule.Name).CodeModule.ProcOfLine(NumLinProc, 0) & Chr(13) & _
Chr(13) & "ОШИБКА " & Chr(13) & Err.Description & "(" & Err.Number & ")", vbCritical, "ПРОЕКТ " & Application.CurrentProject.Name
Осталось автоматизировано переменной NumLinProc присваивать ЛЮБОЙ номер строки кода (в границах строк процедуры)

КАК ЭТО СДЕЛАТЬ? ХЕЛП ПЛИЗ НАРОД!!!!!
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
29.01.2014, 21:14
Так глубоко пока не лез*. Выложу что нашёл по ночному вопросу.
Цитата Сообщение от влад74 Посмотреть сообщение
имя текущей процедуры или функции
___________________
* да вас разве догонишь!
Миниатюры
Как получить имя текущей процедуры или функции?  
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
29.01.2014, 22:52
Цитата Сообщение от влад74 Посмотреть сообщение
Осталось автоматизировано переменной NumLinProc присваивать ЛЮБОЙ номер строки кода (в границах строк процедуры)

пронумеровать строки в каждой процедуре

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub SS()
    Dim a As Integer
    On Error Resume Next
1:
2:  a = 6 / 0
3:  a = 6 / 6
 
    MsgBox "Line " & Erl & "   """ & Err.Description & """"
 
End Sub
Миниатюры
Как получить имя текущей процедуры или функции?  
0
102 / 20 / 0
Регистрация: 02.07.2012
Сообщений: 149
30.01.2014, 01:40  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
пронумеровать строки в каждой процедуре

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub SS()
    Dim a As Integer
    On Error Resume Next
1:
2:  a = 6 / 0
3:  a = 6 / 6
 
    MsgBox "Line " & Erl & "   """ & Err.Description & """"
 
End Sub
Спасибо, не совсем то.
хочется "универсально блоково пропастить обработчики ошибок" без харда.

Добавлено через 2 часа 24 минуты
Мужики давай, давай поднатужимся!!!!!!!!!!!!!!!!
чуть осталось
аааааааааааааааааааааааааааааааа!!!!!!!! !!!!!!!
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
30.01.2014, 07:36

Не по теме:

В 3 часа ночи все спят уже:)



Не совсем понятно чего Вы хотите...
Миниатюры
Как получить имя текущей процедуры или функции?  
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
30.01.2014, 08:01
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub SS()
    Dim n As Integer  ' количество строк в модуле
    Dim i As Integer: i = 1
    Dim s As String
    Dim cl As Integer ' количество строк  в процедуре
    Dim pn As String  ' имя процедуры
    n = Application.VBE.ActiveCodePane.CodeModule.CountOfLines
    Do
         pn = Application.VBE.ActiveCodePane.CodeModule.ProcOfLine(i, 0)
         cl = Application.VBE.ActiveCodePane.CodeModule.ProcCountLines(pn, 0)
         s = s & "Имя процедуры: " & pn & _
             "    Количество строк: " & cl & vbCrLf
                 i = i + cl
    Loop Until i > n
    MsgBox s
End Sub
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,932
Записей в блоге: 4
30.01.2014, 08:31
метод грубой силы
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub a140129_0757()
On Error GoTo err00
Dim j1, j2, j3, jx
j1 = 6
j2 = 0
4: jx = 4: j3 = j1 * "w"
5: jx = 5: Debug.Print 5, j1, j2
6: jx = 6: j3 = j1 / j2
Debug.Print 6, j1, j2, j3
Exit Sub
''
err00:
Debug.Print "метка="; jx, Err.Number, Err.Description
Debug.Print Err.Source
j2 = 2
''Resume Next    ''вернуться на следующую строку
Select Case jx
Case 5
Resume 5       ''вернуться на метку 5
Case 6
Resume 6        ''вернуться на метку 6
Case Else
Debug.Print "прервано="; jx, Err.Number, Err.Description
End Select
 
End Sub
0
102 / 20 / 0
Регистрация: 02.07.2012
Сообщений: 149
30.01.2014, 14:21  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение

Не по теме:

В 3 часа ночи все спят уже:)



Не совсем понятно чего Вы хотите...
Задача элементарна.
При возникновение ошибки нужно выводить сообщение что ошибка произошла :
1. в mdb такой-то
2. в - Модуле5
3. в - Процедуре(function/sub) SS().
4. Ошибка такая то.

А в модуле5 может содержаться несколько десятков function/sub
0
102 / 20 / 0
Регистрация: 02.07.2012
Сообщений: 149
03.02.2014, 12:34  [ТС]
Сам спросил сам отвечаю.

Пример универсального обработчика ошибок.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
5
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 6
26.08.2017, 12:37
Вообще, я такую проблему решаю немного по-другому
Вот стандартная конструкция
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Function SomeFun() As Boolean
Const cS = "SomeFun: "
On Error GoTo 100
SomeFun = True 'Флаг ошибки
 
.... <инструкции> ...
 
SomeFun = False 'флаг корректного выхода (должен быть установлен при любом корректном выходе)
Exit Function
100:
MsgBox cS & Err.Description, vbCritical
'Resume
End Function
Обработчик, само собой, может отличаться.

P.S. Resume бывает нужен, чтобы перейти на конкретную строку с ошибкой
0
193 / 191 / 31
Регистрация: 11.10.2016
Сообщений: 610
28.08.2017, 11:22
вообще-то, если обработчик ошибок внутри процедуры и переход на него осуществляется через On Error GoTo, то имя процедуры и так понятно:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Test
   On Error GoTo ErrCheck
   '...
 
   Exit Sub
 
ErrCheck:
   MsgBox "Error in Sub: Test"
 
End Sub
0
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 6
28.08.2017, 20:28
вообще-то, если обработчик ошибок внутри процедуры и переход на него осуществляется через On Error GoTo, то имя процедуры и так понятно:
Visual Basic
Неа. Название процедуры может меняться, поэтому называть константой выгоднее. Можно сразу после заголовка заменить её и не прокручивать в конец. К тому же, название может встречаться более одного раза, если в обработчике стоит обработка нескольких вариантов ошибок.
0
 Аватар для Malysh-ok
2 / 2 / 0
Регистрация: 17.10.2013
Сообщений: 62
01.12.2017, 23:14
Цитата Сообщение от влад74 Посмотреть сообщение
Сам спросил сам отвечаю.
Пример универсального обработчика ошибок.
влад74, у меня, чтоб пошло, пришлось чуть модернизировать код.
В связи с чем два вопроса:
1) Какой references вы подключали?
2) Означает ли подключеный references, то, что на другом компьютере программа VBA может и не сработать?
0
 Аватар для kalbasiatka
416 / 263 / 83
Регистрация: 27.10.2012
Сообщений: 861
02.12.2017, 10:49
Дебаг перестал переходить на строку ошибки?
0
 Аватар для Rikozenit
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
20.03.2021, 14:24
Цитата Сообщение от влад74 Посмотреть сообщение
Сам спросил сам отвечаю.
Пример универсального обработчика ошибок.
влад74, приветствую! Это же должно работать для Access? Подскажите, плиз, нужно ли подключать какой-то references , чтобы этот код исполнялся правильно?
Ибо у меня он возвращает вместо названий Объекта и Функции, в которых произошла ошибка, названия объекта и функции, на которых у меня в данный момент в редакторе VBA "стоит курсор".
0
 Аватар для anton-sf
128 / 64 / 14
Регистрация: 29.03.2015
Сообщений: 265
20.03.2021, 21:44
reference:
Microsoft Visual Basic for Applications Extensibility (5.3 у меня)

Добавлено через 13 минут
А нет, не обязательно, всё работает при дефолтных референсах, но надо перед VBE добавить Application.

Visual Basic
1
2
3
4
5
6
MsgBox "МОДУЛЬ " & Chr(13) & _
Application.VBE.ActiveCodePane.CodeModule.Name & Chr(13) & Chr(13) & "ПРОЦЕДУРА " & Chr(13) & _
Application.VBE.ActiveVBProject.VBComponents( _
Application.VBE.ActiveCodePane.CodeModule.Name).CodeModule.ProcOfLine(startline, 0) & Chr(13) & _
Chr(13) & "ОШИБКА " & Chr(13) & Err.Description & "(" & Err.Number & ")", _
vbCritical, "ПРОЕКТ " & Application.VBE.ActiveVBProject.Name
Добавлено через 6 минут
Это я про Excel
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2021, 21:44
Помогаю со студенческими работами здесь

Как получить имя текущей страницы?
Tipa kak v desktop Me.Name?

Ожидалось имя процедуры или функции
PROGRAM PRIM2 (INPUT,OUTPUT); {ЛАБОРАТОРНАЯ РАБОТА 1} VAR Y, R, A, B, X: REAL; BEGIN WRITELN ('ВВЕДИТЕ A,B,X'); ...

Ожидалось имя процедуры или функции
добрый день, не подскажите как исправить эту ошибку? var m: integer; function integral_(var a, b: real):...

Ожидалось имя процедуры или функции
В выделенной строке пишет ошибку: Ожидалось имя процедуры или функции. Что делать? const MaxIter = 10; var x, exp: double; c, p:...

Ожидалось имя процедуры или функции
Подскажите в чем ошибка. Программа в общем виде делает из строки fffddaaar строку 3fdd3ar Но почему то при запуске выскакивает ошибка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru