VBA Excel. Содержание рубрики
Содержание рубрики VBA Excel на сайте «Время не ждёт». Систематизация статей по тематическим группам для ускорения поиска нужной информации по заданной теме.
Знакомство с VBA Excel
Методы VBA Excel
Объект Range в VBA Excel
Объекты VBA Excel
Операторы в VBA Excel
Переменные в VBA Excel
Примеры кода VBA Excel
Прочее в VBA Excel
Работа с Word из кода VBA Excel
Редактор VBA Excel
События VBA Excel
Функции в VBA Excel
Циклы в VBA Excel
Элементы управления в VBA Excel
оператор if — VBA: Условно — ничего
спросил
Изменено 1 год, 1 месяц назад
Просмотрено 289 тысяч раз
Существует условие If
в приложении VBA, как показано ниже:
If Not My_Object Is Nothing Then My_Object. Compute
Когда код запускается в режиме отладки, я обнаружил, что условие If
возвращает значение true, даже если My_Object
имеет «Нет переменных».
Кто-нибудь может объяснить это? Я хочу, чтобы My_Object.Compute
выполнялся только тогда, когда существует My_Object
.
- vba
- оператор if
- excel
- excel-2007
- ничего
5
На основании вашего комментария Issun:
Спасибо за объяснение. В моем случае объект объявляется и создается до условия If. Итак, как мне использовать условие If для проверки
? Другими словами, я не хочу выполнять My_Object.Compute, если My_Object имеет
Вам необходимо проверить одно из свойств объекта. Не сказав нам, что это за объект, мы не сможем вам помочь.
Я протестировал несколько обычных объектов и обнаружил, что экземпляр Коллекция
без добавленных элементов показывает
в окне просмотра. Если ваш объект действительно является коллекцией, вы можете проверить условие
, используя свойство .Count
:
Sub TestObj() Затемнить объект как объект Установить Obj = Новая коллекция Если Obj ничто, то Debug.Print «Экземпляр объекта не создан» Еще Если Объект.Счетчик = 0 Тогда Debug.Print "<Переменных нет> (т. е. элементы не добавлены в коллекцию)" Еще Debug.Print "Экземпляр объекта создан и добавлен хотя бы один элемент" Конец, если Конец, если Конец сабвуфера
Также стоит отметить, что если вы объявляете какой-либо объект Новым
, то проверка Ничего
становится бесполезной. Причина в том, что когда вы объявляете объект как новый
, он создается автоматически при первом вызове, даже если вы вызываете его в первый раз, чтобы проверить, существует ли он!
Dim MyObject As New Collection If MyObject Is Nothing Then ' <--- Эта проверка всегда возвращает False
Похоже, это не является причиной вашей конкретной проблемы. Но, поскольку другие могут найти этот вопрос через поиск Google, я хотел включить его, потому что это распространенная ошибка новичков.
1
То, что в вашем объекте класса нет переменных, не означает, что он ничего не значит. Объявление объекта и создание объекта — две разные вещи. Посмотрите и убедитесь, что вы устанавливаете/создаете объект.
Возьмем, к примеру, объект словаря - то, что он не содержит переменных, не означает, что он не был создан.
Подтест() Dim Dim как объект Установите dict = CreateObject("scripting.dictionary") Если не дикт, то ничего, тогда MsgBox "Dict - это что-то!" '<--- Это показывает Еще MsgBox "Dict ничего!" Конец, если Конец сабвуфера
Однако, если вы объявляете объект, но никогда его не создаете, это ничего не значит.
Подтест() Тусклая температура как объект Если не темп - ничто, то MsgBox "Темп это что-то!" Еще MsgBox "Время ничего не значит!" '<---- Это показывает Конец, если Конец сабвуфера
3
В моем примере кода я устанавливал для своего объекта
значение «ничего» и не мог заставить «не» часть оператора if работать с объектом. Я пробовал , если My_Object не ничего
а также если не My_Object ничего
. Это может быть просто синтаксис, который я не могу понять, но у меня не было времени возиться, поэтому я применил небольшой обходной путь, например:
, если My_Object is Nothing Then 'ничего не делать Еще 'Сделай что-нибудь Конец, если
1
Зарегистрируйтесь или войдите
Зарегистрироваться через Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
excel - ничего не делать в vba
спросил
Изменено 2 года, 4 месяца назад
Просмотрено 89 тысяч раз
Есть ли в VBA эквивалент "прохода" Python, чтобы просто ничего не делать в коде?
например:
Для каждого ws In ThisWorkbook. Sheets Если ws.Name = "Требования ВМФ" Тогда ws.Select nReqs = получить_число_строк Ячейки(1, 1).Выбрать Если ActiveSheet.AutoFilterMode Тогда Cells.AutoFilter Selection.AutoFilter ElseIf ws.Name = "temp" Тогда проходят Еще ws.Select nShips = get_num_rows Конец, если Следующий
Я получаю сообщение об ошибке, что проход не определен. Спасибо.
- вба
- первенствовать
6
просто удалите pass
и повторно запустите код. VBA будет рад принять, что я верю
2
Не включать операторы:
Sub qwerty() Если 1 = 3 Тогда Еще MsgBox "1 не равно 3" Конец, если Конец сабвуфера
Просто оставьте поле пустым. Вы также можете использовать оператор Select, его легче читать.
Для каждой страницы в ThisWorkbook. Sheets Выберите дело ws.Name Кейс "Navy Reqs": '... Дело "темп": 'ничего не делать Дело еще: '... Конец выбора Следующий
Напишите код, который делает то, что он говорит, и говорит, что он делает .
Для каждой страницы в ThisWorkbook.Sheets Если ws.Name = "Требования ВМФ" Тогда ws.Select nReqs = получить_число_строк Ячейки(1, 1).Выбрать Если ActiveSheet.AutoFilterMode Тогда Cells.AutoFilter Selection.AutoFilter Иначе Если ws.Name <> "temp" Тогда ws.Select nShips = get_num_rows Конец, если Следующий
Это все, что вам нужно. Инструкции, которая означает «вот какой-то бесполезный код», в VBA не существует.
Вам нужны комментарии, которые говорят почему , а не что - комментарий, который говорит 'ничего не делать
, является полной противоположностью этому. Не пишите код без операций, это чистый шум.
Предполагая, что pass
в Python работает так же, как оператор continue
в C# и переходит к следующей итерации, тогда эквивалент VBA является единственно допустимым использованием GoTo
прыжок:
Для... Если... То Перейти Пропустить ... Пропускать: Следующий
Этот код показывает тест IF, который продолжает поиск, пока не найдет совпадение.
Функция EXCAT(Desc) Dim txt() как строка ' Разбить строку по символам пробела. txt () = Разделить (По убыванию) Для i = 0 в UBound (txt) EXCAT = Application.VLookup(txt(i), Worksheets("Лист1").Range("Отдел"), 2, False) If IsError(EXCAT) Then Else Выход из функции Следующий ' следите за этим пространством для поиска составного слова EXCAT = "- - будет объявлено позднее - -" Конечная функция
Я программировал на COBOL много лет, и эквивалентным оператором «ничего не делать» является NEXT SENTENCE
.
В VBA я создаю фиктивную переменную (иногда глобальную) dim dummy как целое число
, а затем, когда мне нужно это действие «ничего не делать» в If..Then..Else
, я помещаю в строку кода: фиктивный = 0
.
1
На самом деле это законный вопрос. Я хочу запустить процедуру отладки, которая останавливается, когда определенное критическое значение равно, скажем, 8, т. е. установить точку останова на x = 8, а затем выполнить ее построчно. Таким образом, следующая конструкция полезна:
Выбрать случай x Случай 21 'ничего не делать Случай 8 'ничего не делать Случай 14 'ничего не делать Случай 9 'ничего не делать Конец выбора
- Поскольку вы не можете поставить точку останова в комментарии, необходимо фактическое утверждение.
- Вы также не можете поставить точку останова на операторы Case, потому что они выполняются каждый раз.