Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
20.04.2024, 01:30:32

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Нумерация строк кода VBA и функция vba.Erl (строка ошибки в коде)
Страниц: [1]   Вниз
Печать
Автор Тема: Нумерация строк кода VBA и функция vba.Erl (строка ошибки в коде)  (Прочитано 4993 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« : 10.01.2021, 12:17:46 »

Добрый день.
Если Кто-то пользуется функций vba.Erl, поделитесь опытом, пожалуйста - сталкивались ли уже с какими-то особенностями ее использования.
В справочника vba она, похоже, не задокументирована (появилась недавно ?).
Возвращает 0, если в коде нет пронумерованных строк и номер строки с ошибкой, если нумерация есть.
(нумерация я проставляла с помощью надстройки MZ-Tools, но выяснилось, что в качестве номера строки может стоять какая угодно цифра и в произвольном порядке).
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 10.01.2021, 13:38:09 »

похоже, не задокументирована
документировано, но очень давно и на данный момент является скрытым. Его можно посмотреть даже среди методов и свойств из VBA.
Жмем F2. На иконке поиска(бинокль) жмем правой кнопкой мыши и ставим галочку на пункте "Show Hidden Members". В поле поиска вбиваем Erl и оно найдется, но будет бледным.
А вот встроенных возможностей нумерации строк не было тогда и нет до сих пор.
Маленький пример использования:
Код: (vb)
Sub SomeSub()
10 On Error GoTo 40
20 Debug.Print 1 / 0
30 Exit Sub
40 Debug.Print "Ошибка в строке: " & Erl ' вернет 20
End Sub

Следует помнить, что erl воспринимает нумерацию, ограниченную типом Integer(т.е. только до 32 ​​767). И если вдруг произойдет переполнение - никакой ошибки не будет выведено или показано - просто в момент вывода номера строки функцией Erl результат может быть неверным:
Код: (vb)
Sub SomeSub()
99997 On Error GoTo 99999
99998 Debug.Print 1 / 0
99999
 Debug.Print "Ошибка в строке: " & Erl ' вернет 34462
End Sub
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #2 : 10.01.2021, 15:41:18 »

Браво.
Спасибо.
Теперь еще бы найти функцию, которая возвращает номер строки (безотносительно ошибки).
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #3 : 10.01.2021, 16:22:54 »

Нет такой функции. Можно, конечно, и Erl прикрутить, генерируя ошибку на нужной строке. Только совсем неясно зачем это, если строки все равно нумеровать придется руками?
Код: (vb)
Sub SomeSub()
   Dim t&
   t = 1
10 MsgBox "Start"
On Error Resume Next
20 t = t + t
   VBA.Err.Raise "65535", "Module 1", "Custom Error"
30
   Debug.Print "Ошибка в строке: " & Erl & ", описание ошибки: " & Err.Description & ". t=: " & t
40 t = t + t
50 MsgBox "Error raised. t=: " & t
End Sub
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #4 : 11.01.2021, 09:28:49 »

У меня ругается на строку
Код: (vb)
 Dim t&
, требует объявить переменную (с выключенным Option Explicit тоже).
И следующие строки горят красным :
Код: (vb)
VBA.Err.Raise "65535", "Module 1", "Custom Error"

...
Код: (vb)
Debug.Print "Ошибка в строке: " & Erl & ", описание ошибки: " & Err.Description & ". t=: " & t
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #5 : 11.01.2021, 09:49:07 »

В Excel? А в Tools -References нет библиотек с Missing?
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #6 : 11.01.2021, 10:07:49 »

Да, в Excel.
В референсах подключены только четыре первые в списке библиотеки (visual basic for applications, microsoft excel 16.0 object library, OLE Automation и Microsoft Office 16.0 object library).
« Последнее редактирование: 11.01.2021, 10:13:09 от Valetnina » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #7 : 11.01.2021, 10:22:00 »

Не знаю. Текст копировала из форума или переписывала?
t& - это все равно что t As Long. Попробуй заменить. Хотя будет странно, потому что код рабочий во всех версиях и подобное краткое обозначение не должно влиять на работу кода.
Точно именно объявить требует? Может ошибка другая?
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #8 : 11.01.2021, 10:30:50 »

Да, ошибка точно по переменной.
Код копировала из clipboard. Дело еще было возможно в пробелах (после номера строк), подкорректировала их и красная подсветка исчезлаю
Всё наладилось, обошлась без переменной t вообще, главное - принцип и он ясен.
Спасибо большое. До новых встреч !
Записан
RAN
Эксперты
Старожил
*

Репутация: +43/-0
Офлайн Офлайн

Сообщений: 440



Просмотр профиля E-mail
« Ответ #9 : 13.01.2021, 10:58:56 »

Дело еще было возможно в пробелах
Достаточно часто встречается при копировании кода, например, с Планеты.
Поэтому, если строка вдруг покраснела, первым делом нужно удалить все, что там есть "типа пробел", в начале строки.
Записан

А что ты умеешь?
Учиться...
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru