Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Почему у некоторых команд VBA нет подсказок?
 
Доброго времени суток, Планетяне!

Примеры команд:
    • Exit Sub/Function (решено)
    • LBound/UBound
    • ActiveSheet. (после точки нет подсказок)

Позднее связывание не интересует, т.к. там нет подсказок из-за того, что не видна библиотека и это вроде "удалённой" с ней работы.
Изменено: Jack Famous - 6 Сен 2019 11:05:50
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Да сам такое не раз встречал. Есть только догадки, но сам тоже не знаю причины.
Никаких врагов, зато и никаких друзей.
 
Alemox, по идее нет подсказки - нет в библиотеке - команда супервстроенная  :D
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
У меня 2010 офис и все подобные функции описаны в справке, хотя они и не всплывают при быстром наборе.
Никаких врагов, зато и никаких друзей.
 
Возможно, дело в объекте, который неизвестен на момент редактирования и компиляции типа. Допустим, я пишу
Код
Set v = CreateObject("Excel.Application")
Дальше мне нужно выделить лист и я пишу
Код
v.Sheets("Лист1").select
Свойство Excel.Application.Sheets.Item(индекс) описано как Object, т. е. COM-объект неизвестного на момент редактирования и компиляции типа. Откуда бы среде разработки знать, какие у него могут быть или не быть свойства и методы? (с)
 
По поводу раннего и позднего связывания тут всё понятно почему. Опять же, если раннее связывание, то подсказки всплывают.
Никаких врагов, зато и никаких друзей.
 
Цитата
Alemox: Есть только догадки
какие?  :)
Цитата
Hellmaster: Возможно, дело в объекте
это, конечно отвечает на вопрос темы, но интересны в первую очередь команды, приведённые в качестве примера в стартовом сообщении. Про позднее связывание всё ясно и тут никаких сюрпризов нет.
Изменено: Jack Famous - 6 Сен 2019 08:29:47
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
интересны в первую очередь команды, приведённые в качестве примера
Цитата
Jack Famous написал:
Exit Sub/Function
а какую подсказку Вы хотите здесь увидеть? Что должно подсказываться? Exit - это глобальный оператор выхода без аргументов. Его правильное применение определяется только на уровне компиляции проекта. Например, если внутри тела Function написать Exit Sub - то при запуске функции VBE скажет, что так нельзя. Но на уровне написания этого Exit после пробела подсказывать не будет, т.к. к этому оператору не привязаны напрямую никакие ключевые аргументы или операторы(как это сделано, скажем, с ключевым As при объявлении переменных).
Цитата
Jack Famous написал:
LBound/UBound
точного утверждения пока не нашел, но предположу, что эти функции относятся к некоей глобальной реализации, которая не может быть однозначно определена(что-то вроде типа Object). Или все проще - они тупо не ассоциированы с описанием :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, спасибо за развёрнутый ответ  :idea:
Про Exit я думал так: когда меняю Sub на Function (или наоборот) в названии, то концевик меняется сам, так неужели при вводе "ex" или хотя бы "exit" нельзя подхватить тип текущей процедуры  :)
А насчёт L/UBound, то просто постоянно попадаюсь на том, что жмякаю напрасно "Ctrl+Space" для появления подсказки. Привычка - вторая натура  :D
Изменено: Jack Famous - 6 Сен 2019 09:17:49
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Jack Famous написал:
Привычка - вторая натура  
Лень!  :D

Цитата
Jack Famous написал:
при вводе "ex" или хотя бы "exit" нельзя подхватить
Если пишущий не помнит что пишет, то … .  :D  

Если честно, то любые автоподстановки могут такую злую шутку сыграть... Если не ошибаюсь, то есть раскладка клавиатуры US-INT (Unitedstate International) , При работе с Linux и Cirix был более корректный её проброс. попытался её использовать на рабочем компе, а там есть особенность, при вводе кавычек , первая не появляется пока не появится вторая. Может быть для машинописи это и удобно, но кодить было невозможно, особенно когда была потребность нечетного числа кавычек в строке.  Пока не понял в чем причина, грешил на клаву,
 
Цитата
Jack Famous написал:
Про Exit я думал так
дело в том, что Exit может быть использован не только с Sub и Function. Есть ведь и циклы Do и For, например, где для прерывания цикла так же используется Exit. Поэтому ассоциировать напрямую с чем-то конкретным VBA этот оператор не может без компиляции проекта, чтобы определить все вхождения операторов. Оператор End работает так же, но применяется реже.
Примерно тоже самое, кстати, и с объявлениями. Вы же можете объявить переменную с типом "блаблабла"? Да. Но то, что такого типа нет и не было VBA определит только после компиляции. Но на уровне написания он ничего не скажет про несуществующий тип.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
БМВ, лень — двигатель прогресса  ;)
Цитата
Дмитрий(The_Prist) Щербаков: Exit может быть использован не только с Sub и Function.
точно. Не связал с этим - тогда вопрос по нему отпадает, но вот что с Bound'ами?…
Изменено: Jack Famous - 6 Сен 2019 09:50:10
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Новый прикол: для такого "вшитого" объекта, как ActiveSheet после точки также нет никаких вариантов…
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Мне кажется что с боундами и прочими тут замешаны какие-то коллекции. Ну например если пишешь Sheets. то после точки вылазит список, если пишешь Sheets(1). то после точки уже ничего не вылазит. Опять же UBound может быть необязательно у объявленного массива, например у SPLIT
Код
Sub kckmckcmd()
Dim i&, Txt$
Txt = "q w e r t y"
For i = 0 To UBound(Split(Txt, , , vbTextCompare))
    Debug.Print Split(Txt, , , vbTextCompare)(i)
Next
End Sub

Ну, а может у них есть внутренние теги, по которым и формируется этот выпадающий список. И при написании некоторых функций их забыли вложить  :) Вот и остались в подвешенном состоянии, не знали в какой момент нужно их появление. Опять же эти функции измеряют размерность массива. А до компиляции ещё неизвестно есть у тебя этот массив в коде или нет. Наличие массива можно определить только после компиляции, тут даже объявление переменных не поможет. В общем загадка.
Никаких врагов, зато и никаких друзей.
 
Цитата
Alemox: если пишешь Sheets
это вообще интересный персонаж. Его ещё нельзя присвоить типом переменной (только As WorkSheet), хотя обычно в коде полностью заменяет WorkSheet
Изменено: Jack Famous - 6 Сен 2019 11:22:17
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Я вообще Sheets не использую, это представляет из себя коллекцию рабочих листов. Только Worksheet применяю.
Никаких врагов, зато и никаких друзей.
 
Цитата
Alemox: Sheets не использую, это представляет из себя коллекцию рабочих листов
а я думал, что листы диаграмм не входят в WorkSheets, в отличие от Sheets, то есть последняя больше. Тоже стараюсь не использовать.
Изменено: Jack Famous - 6 Сен 2019 12:30:27
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Цитата
Alemox написал:
это представляет из себя коллекцию рабочих листов
ну вот как раз нет. Коллекция Sheets это коллекция ЛЮБЫХ листов в книге, включая листы диаграмм, листы макросов, рабочие листы. И именно поэтому после ввода точки нет подсказок, т.к. невозможно заранее определить к какому типу листа коллекции обращаемся.
А вот Worksheets это коллекция исключительно РАБОЧИХ листов и все методы и свойства там определены заранее и других быть не может.
Отсюда есть важны вывод: если хотите обратиться ко всем листам книги для сбора именно данных - имеет смысл всегда обращаться именно к Worksheets, чтобы не получить ошибку при обращении к листу диаграммы например, для получения данных ячеек.
Собственно, ActiveSheet несет в себе ту же засаду - это активный лист любого типа, а значит показать все доступные методы этого листа заранее нельзя.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, и снова выручаете)) Спасибо!
«Тот, кто несет фонарь, спотыкается чаще, чем тот, кто идет следом.»
Иоганн Пауль Фридрих Рихтер
 
Дмитрий я про это и говорил. Я просто ограничился рабочими листами так как их обсуждали.  :) Просто выразился некорректно. Надо было написать включает, а не состоит из. Каюсь запутал.
Никаких врагов, зато и никаких друзей.
Страницы: 1
Читают тему (гостей: 1)
Наверх