Имитация нажатия клавиш на клавиатуре в VBA Excel с помощью оператора 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:
Sub Primer1() ‘Выбираем первую ячейку Range(«A1»).Select ‘Нажимаем клавиши «а», «б» и «в» SendKeys «абв» ‘Нажимаем «ENTER» SendKeys «~» ‘Нажимаем клавиши «1», «2», «3» и «ENTER» SendKeys «123 ~» ‘Нажимаем клавишу «7» пять раз и «ENTER» SendKeys «{7 5} ~» ‘Активируем правый цифровой блок ‘SendKeys «{NUMLOCK}» End Sub |
Пример 2
Раскрываем с помощью кода VBA Excel автофильтр или выпадающий список (имитация нажатия сочетания клавиш ALT+↓
):
Sub Primer2() ‘Выбираем ячейку с автофильтром или раскрывающимся списком Range(«D1»).Select ‘Раскрываем список SendKeys «%{DOWN}» ‘Активируем правый цифровой блок ‘SendKeys «{NUMLOCK}» End Sub |
Пример 3
Еще три варианта эмуляции нажатия сочетаний клавиш:
‘Создание новой книги SendKeys «^n» ‘Открытие Диспетчера имен SendKeys «^{F3}» ‘Открытие Диспетчера задач SendKeys «^+{ESC}» |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
стрелка вниз/вверх |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Цитата |
---|
towelie написал: нужен именно аналог стрелки ВНИЗ на клавиатуре! |
Собсно
Код |
---|
Application.SendKeys "{Down}" |
но это ненадежный способ, который применяется в самом крайнем случае. Если в момент работы команды активным окажется какое-либо другое окно (напр. системное сообщение), то «нажание кнопки» уйдет туда.
Цитата |
---|
towelie написал: есть ли функция VBA для активации ячейки следующей снизу ВИДИМОЙ (после фильтра) |
Лучше всего перебрать диапазон видимых ячеек, напр. в 1 столбце автофильтра
Код |
---|
Dim c As Range With ActiveSheet.AutoFilter.Range.Columns(1) For Each c In .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible) c.Select 'например Next End With |
Чтобы перейти от ячейки с к след. видимой:
Код |
---|
Set c = Range(c.Offset(1), Cells(Rows.Count, c.Column)).SpecialCells(xlCellTypeVisible)(1) |
Формулировка задачи:
здравствуйте, собственно сабж
Код к задаче: «Возможно ли нажать Стрелочку вниз, используя SendKeys»
textual
Option Explicit Sub NFCKitssss() 'открыть программу NFC Kits путём открытия файла NFCKits.ndef CreateObject("WScript.Shell").Run "F:NFCKits.ndef" 'имитация нажатия на кнопку стрелка вниз 3 раза для перехода на строку пункт меню Tap and Send/Write Tag: Telephone SendKeys "{DOWN 3}" 'имитация нажатия на кнопку DELETE для обнуления поля ввода SendKeys "{DELETE 50}" 'ввод нужного текста в поле ввода SendKeys String:="+79028912680" 'закрыть программу NFC Kits путём закрытия файла NFCKits.ndef '??? End Sub Private Sub CommandButton1_Click() Call NFCKitssss End Sub
Полезно ли:
12 голосов , оценка 3.583 из 5