Как избежать выбора метода в VBA и почему

У первого телевизора, который я помню, у нас в детстве НЕ было пульта дистанционного управления. Как неудобно, правда?

Каждый раз, когда кто-то в семье хотел сменить канал или громкость, нам приходилось вставать с дивана и подходить к телевизору, чтобы нажать кнопку. Никто не хотел сидеть ближе всех к телевизору, если только ему не нужны были физические упражнения…

The Select Method is Like Using a TV without a Remote Control

Представьте, сколько раз вы нажимали кнопки на пульте телевизора прошлой ночью. Наверное, много! Особенно, если вы женаты или у вас есть дети. А теперь представьте, как неэффективно подходить к телевизору, чтобы нажимать каждую из этих кнопок. Что за трата времени!

Метод выбора медленный, подвержен ошибкам и чрезмерно используется

Метод выбора в VBA может быть таким же трудоемким для Excel, как для вас, чтобы встать с дивана и сменить канал.

Метод Select используется для выбора объектов в Excel, таких как рабочие таблицы, диаграммы, фигуры и диапазоны. Вот несколько примеров.

Worksheets("Sheet2").Select
Range("B5").Select

За этими строками кода обычно следует другая общая команда для копирования / вставки значений, форматирования ячейки, вставки формул и т.д.

Проблема с методом Select в том, что он действительно может замедлить ваш макрос. Когда мы используем метод Select, VBA заставляет приложение Excel обновлять экран с изменением выбора (отображать новый рабочий лист, выделять диапазон / ячейку и т.д.). Это обновление экрана занимает дополнительное время и обычно не требуется.

Хорошей новостью является то, что в 99% случаев, метода Select можно избежать.

Не беспокойся, это не твоя вина!

Мы часто видим метод Select в коде VBA, и это в основном вина регистратора макросов. Не поймите меня неправильно, макро-рекордер — отличный инструмент, но код, который он производит, может быть довольно неэффективным.

Большинство задач, которые мы автоматизируем с помощью VBA, НЕ требуют, чтобы мы сначала выбирали рабочую книгу, рабочий лист или диапазон. Давайте рассмотрим простой пример копирования и вставки диапазона ячеек с одного листа в другой.

Программа записи макросов выдает следующий код, когда я записываю свои действия, чтобы скопировать диапазон B2: B8 на листе 1 и вставить его на листе 2.

Sub Macro_Recorder_Copy_Paste()

    Sheets("Sheet1").Select
    Range("B2:B8").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("B2").Select
    ActiveSheet.Paste

End Sub

Метод Select используется 4 раза в коде выше. Свойство Selection также используется один раз, так что это действительно 5 ссылок на выделение для простой вставки копии.

Kick Select to the Curb with Andy

Этот макрос можно сделать намного эффективнее!

Нам не нужно выбирать диапазоны перед большинством действий (методы)

Нам не нужно выбирать листы или диапазоны для этого простого действия копирования и вставки. Следующий макрос выполняет ту же задачу без метода Select и требует только одну строку кода.

Sub Simple_Copy_Paste()

    Sheets("Sheet1").Range("B2:B8").Copy Sheets("Sheet2").Range("B2")

End Sub

Ознакомьтесь с моей статьей и серией видео о 3 способах копирования и вставки с помощью VBA, чтобы получить больше примеров кода и пояснений.

Какая разница между макросами?

Допустим, вы хотите изменить телеканал с 2 на 7. В первом примере с макро-рекордером требуется пять раз нажать кнопку «канал +». Телевизор должен проделать дополнительную работу для отображения каждого канала на экране, когда вы несколько раз нажимаете кнопку.

The Channel Up Down Button on the TV Remote is Similar to using the VBA Select Method

Упрощенный макрос требует, чтобы вы нажали кнопку 7 на пульте дистанционного управления один раз, чтобы перейти непосредственно к каналу 7. Гораздо быстрее и проще! 🙂

Метод выбора вызывает больше ошибок

У меня было довольно много вопросов, почему следующая строка кода возвращает ошибку.

Worksheets("Sheet2").Range("A2").Select

Возвращает следующую ошибку:

Run-time error '1004'
Select method of the Range class failed
VBA Error Select Method of Range Class Failed

Это просто правило в VBA, которое не позволяет нам выбирать лист и диапазон в одной строке кода. Если вы действительно хотите выбрать лист и диапазон, то нам нужно разбить его на две строки кода.

Worksheets("Sheet2").Select
Range("A2").Select

Метод Select также может быть подвержен множеству других ошибок. Важно правильно квалифицировать код, сначала выбрав родительские объекты в иерархии, такие как рабочие книги и рабочие таблицы, прежде чем выбирать диапазон.

Следовательно, вы должны выбирать ячейки только тогда, когда это абсолютно необходимо. Обычно это происходит, когда вы хотите направить пользователя в новое место в книге после запуска макроса.

Как еще мы можем избежать выбора метода?

Мы хотим, чтобы наши макросы были максимально эффективными, чтобы мы могли экономить время и ​​получать дополнительные бонусные баллы в обзорах производительности! А отказ от метода Select — один из простых способов действительно улучшить наши макросы.

Записывающее устройство для макросов — это замечательный инструмент для получения фрагментов кода и изучения ссылок на объекты, свойства и методы в Excel. Однако он создает код для действий, которые мы должны выполнить в пользовательском интерфейсе Excel. Эти действия не всегда необходимы при программировании компьютера для выполнения той же задачи с помощью макроса.

Если вы считаете, что в макросе есть какие-то ненужные методы Select, но вы не знаете, как от них избавиться, оставьте комментарий ниже со своим кодом.

Было бы здорово увидеть некоторые другие примеры того, как мы можем сделать наш код более эффективным. И я знаю, что в сообществе Excel Campus есть несколько умных VBA-кодеров, которые будут рады помочь с некоторыми предложениями.

Оцените статью
Добавить комментарий