Имитация нажатия клавиш на клавиатуре в 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




