VBA Excel. Оператор SendKeys (имитация нажатия клавиш)

Имитация нажатия клавиш на клавиатуре в VBA Excel с помощью оператора SendKeys, в том числе эмуляция нажатия сочетаний клавиш. Синтаксис, коды, примеры.

Синтаксис оператора SendKeys

Параметры оператора SendKeys:

Параметр Описание
string Обязательный параметр. Строковое выражение, возвращающее код клавиши (сочетания клавиш).
wait Необязательный параметр. Логическое значение, определяющее режим ожидания.
False (по умолчанию) – контроль процедуре возвращается сразу после отправки кода клавиш.
True – перед возвратом контроля процедуре коды клавиш обрабатываются.

Имитация нажатия клавиш

Эмуляция нажатия алфавитно-цифровых клавиш из кода VBA Excel, не представляющих спецсимволы: параметру string задается значение символа в прямых кавычках, например, "А", "Абвгд", "356".

Имитация нажатия клавиш, представляющих спецсимволы: параметру string задается значение символа в фигурных скобках, например, "{^}", "{)}".

Спецсимволы, которые следует заключать в фигурные скобки: плюс +, возведение в степень ^, знак процента %, тильда ~, круглые скобки (), квадратные скобки [] и сами фигурные скобки {}. Символы фигурных скобок указываются так: "{{}" и "{}}".

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

Фигурные скобки используются и для имитации нескольких нажатий одной клавиши из кода VBA Excel. В этом случае параметр string записывается в виде {клавиша число}, где число – количество нажатий. Например: "{а 10}".

Коды специальных клавиш

Клавиша Код
BACKSPACE {BACKSPACE} или {BS}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL или DELETE {DELETE} или {DEL}
СТРЕЛКА ВНИЗ {DOWN}
END {END}
ENTER {ENTER} или ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS или INSERT {INSERT} или {INS}
СТРЕЛКА ВЛЕВО {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
СТРЕЛКА ВПРАВО {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
СТРЕЛКА ВВЕРХ {UP}
F1 … F16 {F1}{F16}

Эмуляция сочетаний клавиш

Чтобы указать сочетание клавиш с SHIFT, CTRL, ALT или их комбинацией, необходимо добавить перед кодом клавиши один или несколько следующих кодов:

Клавиша Код
SHIFT +
CTRL ^
ALT %

Чтобы указать, что клавиши SHIFT, CTRL и ALT в любом сочетании необходимо удерживать, нажимая несколько других клавиш, заключите код для последних клавиш в круглые скобки. Например, чтобы указать, что нужно удерживать клавишу SHIFT, нажимая клавиши а, б, в, г, д, введите "+(абвгд)".

Важное примечание:
Применение оператора SendKeys может приводить к автоматическому отключению* правого цифрового блока клавиатуры (переключает на стрелки и специальные клавиши). Чтобы вернуть исходную функциональность цифрового блока, необходимо в конце процедуры применить имитацию нажатия клавиши «NUM LOCK»: SendKeys "{NUMLOCK}". К сожалению, работает не всегда.

* Обнаружено в Windows 8.1 (Excel 2016).

Примеры с оператором SendKeys

Коды примеров запускаются через кнопку на рабочем листе, иначе имитация нажатия клавиш произойдет в окне редактора VBA с записью символов внутри процедуры. Попробуйте, ради интереса, запустить код первого примера из редактора VBA.

Пример 1
Заполняем первые три ячейки столбца «A» различными значениями, имитируя нажатия клавиш из кода VBA Excel:

Пример 2
Раскрываем с помощью кода VBA Excel автофильтр или выпадающий список (имитация нажатия сочетания клавиш ALT+↓):

Пример 3
Еще три варианта эмуляции нажатия сочетаний клавиш:

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

4 комментария для “VBA Excel. Оператор SendKeys (имитация нажатия клавиш)”

  1. К сожалению, вариант исправления нажатия NUMLOCK не работает на win10 х64.

    P.S.: в Примере 1 и 2 ошибки – нет введения оператора SendKeys “{NUMLOCK}”, идет только его описание через ‘.

    1. Евгений

      Добрый день!
      Я специально оставил строку SendKeys "{NUMLOCK}" закомментированной, чтобы пользователь посмотрел, отключится у него Num Lock или нет.
      Протестировал код Примера 1 в Excel 2016 x64:
      с закомментированным SendKeys "{NUMLOCK}": первый прогон кода отключает Num Lock, второй – включает;
      с раскомментированным SendKeys "{NUMLOCK}": устанавливается следующее состояние: два прогона кода с отключенным Num Lock, два прогона – с включенным.

      1. именно.
        Т.к. в моей ситуации кнопки с подобными макросами привязаны к панели навигации, то в итоге получается рандомайзер – полистал, поискал нужное и приходится смотреть в каком состоянии NumLock. Кнопки навигации могут быть нажаты по нескольку раз.

        Жаль, так бы это решение было очень простым для понимания (в VBA я не силен). Вообще странно, почему так происходит? Я так понимаю, что SendKeys это внутренняя команда Excel, но какая-то забагованная(

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.