Нажатие клавиш vba excel
Обработка событий мыши. В VBA поддерживаются следующие основные события мыши (табл. 6.1).
Событие происходит при щелчке/двойном щелчке мыши
Происходит, когда нажимается кнопка мыши
Генерируется при перемещении мыши
Генерируется при отпускании кнопки мыши. Возникает после события MouseDown
Обработка событий Cick и DblClick. Процедура обработки события Click имеет синтаксис
Private Sub Имя_элемента_С11ск ()
Программный код обработки события End Sub
Процедура обработки события DblClick имеет синтаксис
Private Sub Имя_элемента_ВЫСИск (ByVal Cancel As MSForms.ReturnBoolean)
Программный код обработки события End Sub
Рассмотрим пример программы обработки события Click u DblClick.
Последовательность выполнения примера 6.1.
- 1. Активизируйте приложение MS Excel, создайте (сохраните) новую книгу под именем MyExEvents. Заметим, что для MS Excel, начиная с версии 2000, книгу следует сохранять с поддержкой макросов (*.xlsm).
- 2. Войдите в редактор VBA (Alt + FI 1).
- 3. Создайте форму UserForml. Для этого правой кнопкой мыши в окне проекта выделите объект VBAProject(MyExEvents) и выберете команду Insert —> UserForm из строки меню или контекстного меню (см. рис. 5.4).
- 4. В панели элементов управления ToolBox последовательно выберите элементы управления (метку и текстовое поле) и поместите их на форму, как это описано в параграфе 5.2. Сформированные VBA имена данных элементов метки — Label 1 и текстового окна — TextBoxl менять нс нужно.
Готовая форма приведена на рис. 6.1.
Рис. 6.1. Форма примера 6.1
5. В окне кода создайте шаблон обработчика события Activate для элемента JserEom1. Последовательность действий для этого описана в параграфе 5.2. В данную процедуру введите следующий код:
Private Sub UserForm_Activate()
В процедуру обработчика события Labell Click () введите код
Private Sub Labell_Click()
TextBoxl.Text = "Произведен один щелчок"
В процедуру обработчика события Labell DblClick () введите код
Private Sub Labell_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
TextBoxl.Text = "Произведен двойной щелчок"
Рис. 6.2. Результат выполнения примера 6.1
Обработка событий MouseUp и MouseDown. Процедуры событий MouseUp и MouseDown имеют соответственно следующий синтаксис:
Private Sub Имя_элемента_Мо1БеОоит (ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,
ByVal Y As Single)
Программный код обработчика события End Sub
Private Sub Имя_элемента_МоиэеХ]р(ByVal Button As Integer,
ByVal Shift As Integer, ByVal X As Single,
ByVal Y As Single)
Программный код обработчика события End Sub,
где Имя_элемента — имя элемента управления, в области которого возникло событие; MouseDown | MouseUp — обрабатываемое событие; Button - целое число или константа, сообщающие о том, какие кнопки мыши нажаты; Shift — целое число, сообщающее о том, какие из клавиш [Shift], |Ctrl[ или [Alt] нажаты; X — координата указателя мыши по горизонтали; Y — координата указателя мыши по вертикали.
Допустимые значения параметров Button и Shift приведены соответственно в табл. 6.2 и 6.3.
Основные значения и описание параметра Button
Основные значения и описание параметра Shift
Окончание табл. 63
- 1. В новой активной книге создайте форму с именем frMouse (см. параграф 5.2).
- 2. Поместите на эту форму четыре метки с именами IblMouse, IblXY., IblButton, IblShift (см. параграф 5.2).
- 3. Для события MouseDow формы (см. параграф 5.2) введите исходный текст, приведенный в листинге 6.1.
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,
ByVal Y As Single)
Dim strButton As String 'нажата кнопка (параметр Button) Dim strShift As String 'нажата клавиша (параметр Shift) Dim strX As String 'значение координаты X курсора мыши Dim strY As String ' значение координаты У курсора мыши ' преобразование целых значений параметров X и Y в строки strX = CStr(X) : strY = CStr(Y)
'проверка значения Shift — имя нажатой клавиши Select Case Shift Case 0
strShift = "Shift + Ctrl"
' проверка значения Button - имя нажатой кнопки Select Case Button Case 0
lblMouse.Caption = "Событие MouseDown"
lblXY.Caption = "Х=" & strX & " Y X: " & Cstr(X) & & " Y: " & Cstr(Y)
Обработка событий клавиатуры. В VBA обрабатываются три вида событий клавиатуры (табл. 6.4)
Обработка событий клавиатуры
Генерируется, когда нажимается, а затем отпускается одна из клавиш, имеющих код в таблице ASCII
Генерируется при нажатии любой клавиши
Генерируется при отпускании клавиши
Обработка события KeyPress. Если в процессе выполнения программы пользователь нажимает клавишу клавиатуры, то операционная система (Windows) вызывает событие KeyPress сначала для формы, имеющей фокус, а затем для элемента управления, имеющего фокус. Синтаксис процедуры обработчика события:
Private Sub Имя_элемента_КеуРгезз(ByVal KeyAscii As MSForms.Returnlnteger)
Код обработчика события End Sub,
где Имя_элемента — имя элемента управления, в области которого произошло событие; KeyPress — обрабатываемое событие; KeyAscii — код из таблицы ASCII, соответствующий нажатой клавише.
Последовательность выполнения примера 6.4.
1. Для решения данной задачи используем форму, разработанную в примере 6.1. В процедуру обработчика события KeyPress элемента управления TextBoxI нужно ввести следующий программный код:
Private Sub TextBoxl_KeyPress(ByVal KeyAscii As MSForms.Returnlnteger)
' объявление переменных
MsgBox Msg End Sub
Рис. 6.3. Результат выполнения примера 6.4
Обработка событий Key Up и Key Down. Когда на клавиатуре нажимается любая клавиша, то для элемента управления, находящегося в фокусе, генерируется событие KeyDown, при отпускании клавиши — событие KeyUp. Синтаксис этих событий имеет вид
Privat Sub Имя_элемента_KeyUp (ByVal KeyCode As MSForms.Returnlnteger, ByVal Shift As Integer)
Код обработчика события End Sub
Privat Sub Ямя_элемента_КеуОсжп(ByVal KeyCode As MSForms.Returnlnteger, ByVal Shift As Integer)
Код обработчика события End Sub,
где Имя элемента — имя элемента управления, вызвавшего событие; KeyUp/KeyDown — обрабатываемое событие; KeyCode — целое число, передающее значение константы нажимаемой или отпускаемой клавиши. Этот параметр поддерживает код не только обычной клавиши, но и функциональных клавиш, клавиш на числовой клавиатуре, клавиш со стрелками и др.; Shift — целое число, которое сообщает о том, были ли нажаты клавиши [Shift], [Ctrl], [Alt]. Допустимые значения параметра Shift приведены в табл. 6.3, а параметра KeyCode — в табл. 6.5.
Имитация нажатия клавиш на клавиатуре в VBA Excel с помощью оператора SendKeys, в том числе эмуляция нажатия сочетаний клавиш. Синтаксис, коды, примеры.
Синтаксис оператора SendKeys
Параметры оператора SendKeys:
Параметр | Описание |
---|---|
string | Обязательный параметр. Строковое выражение, возвращающее код клавиши (сочетания клавиш). |
wait | Необязательный параметр. Логическое значение, определяющее режим ожидания. False (по умолчанию) – контроль процедуре возвращается сразу после отправки кода клавиш. True – перед возвратом контроля процедуре коды клавиш обрабатываются. |
Имитация нажатия клавиш
Эмуляция нажатия алфавитно-цифровых клавиш из кода VBA Excel, не представляющих спецсимволы: параметру string задается значение символа в прямых кавычках, например, "А" , "Абвгд" , "356" .
Имитация нажатия клавиш, представляющих спецсимволы: параметру string задается значение символа в фигурных скобках, например, "" , "<)>" .
Спецсимволы, которые следует заключать в фигурные скобки: плюс + , возведение в степень ^ , знак процента % , тильда
, круглые скобки () , квадратные скобки [] и сами фигурные скобки <> . Символы фигурных скобок указываются так: "" и "<>>" .
Для эмуляции нажатия специальных клавиш, включая функциональные и клавиши управления курсором, используются специальные коды, заключенные в фигурные скобки.
Фигурные скобки используются и для имитации нескольких нажатий одной клавиши из кода VBA Excel. В этом случае параметр string записывается в виде , где число – количество нажатий. Например: "" .
Коды специальных клавиш
Клавиша | Код |
---|---|
BACKSPACE | или |
BREAK | |
CAPS LOCK | |
DEL или DELETE | или |
СТРЕЛКА ВНИЗ | |
END | |
ENTER | или |
Эмуляция сочетаний клавиш
Чтобы указать сочетание клавиш с SHIFT, CTRL, ALT или их комбинацией, необходимо добавить перед кодом клавиши один или несколько следующих кодов:
Клавиша | Код |
---|---|
SHIFT | + |
CTRL | ^ |
ALT | % |
Чтобы указать, что клавиши SHIFT, CTRL и ALT в любом сочетании необходимо удерживать, нажимая несколько других клавиш, заключите код для последних клавиш в круглые скобки. Например, чтобы указать, что нужно удерживать клавишу SHIFT, нажимая клавиши а, б, в, г, д, введите "+(абвгд)" .
Важное примечание:Применение оператора SendKeys может приводить к автоматическому отключению* правого цифрового блока клавиатуры (переключает на стрелки и специальные клавиши). Чтобы вернуть исходную функциональность цифрового блока, необходимо в конце процедуры применить имитацию нажатия клавиши «NUM LOCK»: SendKeys "" . К сожалению, работает не всегда.
* Обнаружено в Windows 8.1 (Excel 2016).
Примеры с оператором SendKeys
Коды примеров запускаются через кнопку на рабочем листе, иначе имитация нажатия клавиш произойдет в окне редактора VBA с записью символов внутри процедуры. Попробуйте, ради интереса, запустить код первого примера из редактора VBA.
Пример 1
Заполняем первые три ячейки столбца «A» различными значениями, имитируя нажатия клавиш из кода VBA Excel:
Эмуляция нажатия клавиш
Здравствуйте форумчане ! Dim WshShell Set WshShell = CreateObject("WScript.Shell") .
Эмуляция нажатия клавиш в стороннем приложении
Добрый день. Есть тестовое приложение, оно содержит один элемент меню, на котором висит.
Эмуляция клавиш на уровне драйвера
В общем есть функция keybd_event она эмулирует нажатие клавиш на уровне Windows но мне надо.
Эмуляция нажатия CommandButton1 на UserForm1
Добрый день! Помогите, пожалуйста, разобраться как работать с эмуляцией нажатия кнопки на форме.
Windows 2000/XP: для американской стандартной клавиатуры это клавиша*';:'.
BB Windows 2000/XP: для любой страны/региона это клавиша '+'.
BC Windows 2000/XP: для любой страны/региона это клавиша*','.
BD Windows 2000/XP: для любой страны/региона это клавиша '-'.
BE Windows 2000/XP: для любой страны/региона это клавиша*'.'.
BF Используется для разных знаков; он может изменяться клавиатурой.
Windows 2000/XP: для американской стандартной клавиатуры это клавиша*'/?'.
C0 Используется для разных знаков; он может изменяться клавиатурой.
Windows 2000/XP: для американской стандартной клавиатуры это клавиша '`
Windows 2000/XP: для американской стандартной клавиатуры это клавиша '[ DC Используется для разных знаков; он может изменяться клавиатурой.
Windows 2000/XP: для американской стандартной клавиатуры это клавиша '\|'.
DD Используется для разных знаков; он может изменяться клавиатурой.
Windows 2000/XP: для американской стандартной клавиатуры это клавиша ']>'.
DE Используется для разных знаков; он может изменяться клавиатурой.
Windows 2000/XP: для американской стандартной клавиатуры это клавиша 'одиночная*кавычка/двойная*кавычка'.
DF Используется для разных знаков; он может изменяться клавиатурой.
E0 Зарезервирован.
E1 Специальный для*OEM.
E2 Windows 2000/XP:*или клавиша*угловой*скобки*или*обратный*слэш*(наклонная черта влево) на*RT*клавиатуре с 102 клавишами.*
E3-E4 Специальные для*OEM.
E5 Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: клавиша*IME*PROCESS*(обработка*IME).*
E6 Специальные для*OEM.
E7 Windows 2000/XP: Используется* для перехода на символы**Unicode*, как будто бы они были нажатиями клавиш. Клавиша**VK_PACKET*- младшее слово 32-разрядного значения*Virtual*Key, используемого для не клавиатурного метода ввода данных. Подробную информацию, см. в разделе Замечания в описании*KEYBDINPUT,*SendInput,*WM_KEYDOWN*и*WM_KEYUP.*
E8 Предназначения нет.
E9-F5 Специальные для*OEM.
F6 Клавиша*Attn.
F7 Клавиша*CrSel.
F8 Клавиша*ExSel.
F9 Клавиша очистки*EOF.
FA Клавиша воспроизведения.
FB Клавиша увеличения/уменьшения.
FC Зарезервировано для будущего использования.
FD Клавиша*PA1.
FE Клавиша очистки.*
В этой статье мы увидим план Excel VBA SendKeys. Вы когда-нибудь задумывались о создании программы, которая автоматически сохраняет ваш рабочий лист, и вам не нужно нажимать кнопку «Ctrl + S» или «Сохранить в Excel» для этого? Это кажется фантастикой, верно? Однако это можно сделать. В VBA есть оператор команды, называемый SendKeys, который позволяет отправлять нажатия клавиш в виде команды в приложение так же, как если бы вы использовали клавиатуру для выполнения задачи. (Пример. Сохранение файла. Для сохранения файла вы нажимаете Ctrl + S на клавиатуре). Рекомендуется использовать SendKeys в качестве последнего параметра при автоматизации любой задачи. Причина этого в том, что, как мы уже обсуждали, SendKeys отправляет нажатия клавиш приложению, которое в данный момент активно. Что если у вас есть активное окно приложения во время выполнения кода, в котором вы не хотите, чтобы изменения произошли? Это даст неожиданные результаты, верно? Это единственная причина, мы должны использовать SendKeys в качестве последнего варианта при автоматизации вещей. Однако его можно использовать для небольшой автоматизации, когда никакая другая прикладная среда не будет мешать той, в которую вы хотели внести изменения.
Синтаксис метода SendKeys:
SendKeys(String As String, (Wait))
Первый аргумент «String As String» указывает комбинации клавиш, которые вы хотите использовать в программе (например, комбинация клавиш Ctrl + S).
Wait будет необязательным параметром, который принимает логические значения TRUE и FALSE. Если ожидание имеет значение ИСТИНА, это означает, что система будет ожидать обработки ключей, а затем перейдет к следующей строке и скомпилирует / запустит то же самое. Если значение ожидания равно ЛОЖЬ (можно оставить пустым), то система не будет ждать обработки ключей и продолжит выполнение всего кода.
Некоторые методы используют, которые вы можете комбинировать нажатия клавиш с Ctrl, Shift или Alt. Давайте посмотрим, как мы можем это сделать. Ниже приведена таблица, в которой указаны комбинации нажатий клавиш SendKeys с помощью Ctrl, Shift и Alt:
Ключ, который нужно сочетать с | Оператор, который будет использоваться перед клавишами для комбинации |
сдвиг | + (Клавиатура плюс знак) |
Ctrl | ^ (Знак оператора каретки) |
Alt | % (Знак процента) |
Ну, что это значит? Это означает, что если вы хотите использовать комбинацию клавиш в качестве кода Ctrl + S в коде, вы можете использовать метод SendKeys и сделать это с SendKeys, затем оператором Caret (^) для Ctrl и затем «s». Это сохранит текущий лист в вашем файле Excel.
Как использовать метод SendKeys в Excel VBA?
Мы узнаем, как использовать метод SendKeys в Excel с помощью кода VBA.
Вы можете скачать этот шаблон Excel VBA SendKeys здесь - Шаблон Excel VBA SendKeys
VBA SendKeys - Пример № 1
Давайте рассмотрим несколько простых примеров, которые позволят нам глубже погрузиться в работу команды VBA SendKeys.
В этом первом примере мы увидим очень простую автоматизацию, которая автоматически сохраняет текущий открытый файл Excel. Вам не нужно нажимать кнопку Сохранить или Ctrl + S, чтобы сохранить файл. Следуйте инструкциям ниже для достижения результата.
Шаг 1. Откройте модуль на вкладке меню «Вставка», как показано ниже.
Шаг 2: Определите новую подпроцедуру, которая может содержать ваш макрос.
Код:
Шаг 3: Теперь, чтобы сохранить любой файл, у вас есть комбинация клавиш клавиатуры в виде Ctrl + S. Чтобы преобразовать это в код, мы можем использовать оператор каретки (^), а затем ключевое слово «s» в качестве аргумента оператора SendKeys.
Код:
Здесь ключевое слово Application указывает приложение, в которое мы посылаем нажатия клавиш (в данном случае приложение Excel). «^ S» в скобках указывает на аналогичную операцию клавиатуры Ctrl + S.
Шаг 4: Запустите этот код, нажав кнопку «Выполнить» или нажав клавишу F5.
После успешного запуска этого кода ваш файл будет сохранен.
VBA SendKeys - Пример № 2
Теперь мы увидим, как закрыть текущее приложение, отправив программные клавиши через код макроса с помощью метода SendKeys. Следуйте инструкциям ниже:
Шаг 1: Напишите подпроцедуру, которая может держать ваш макрос под модулем.
Код:
Шаг 2: Используйте метод Application.SendKeys для передачи программных клавиш клавиатуры в приложение. Поскольку текущую панель VBA можно закрыть с помощью сочетания клавиш Alt + Q, мы можем использовать «% q» под макросом.
Код:
VBA SendKeys - Пример № 3
Теперь мы собираемся написать код, который автоматически открывает Блокнот и автоматически пишет текст в нем. Смотрите скриншот ниже:
Шаг 1: Напишите подпроцедуру, которая может держать ваш макрос под модулем.
Код:
Оболочка вызова позволяет системе открывать приложение. Путь, где находится Notepad.exe. vbNormalFocus - это необязательный аргумент, который указывает на фокус на открытии и восстановлении приложения до его исходного размера и положения.
Шаг 2: Используйте Call и Sendkeys в комбинации, чтобы система могла добавить текст в Блокнот.
Код:
Шаг 3: Здесь мы добавляем текст «Здравствуйте, VBA!» С помощью SendKeys в Блокнот. True указывает время ожидания для команды SendKeys.
Код:
Шаг 4: Запустите этот код, нажав клавишу F5 или нажав кнопку «Выполнить».
Вот как мы можем использовать метод SendKeys для автоматизации приложений через макрос VBA.
То, что нужно запомнить
- Будьте очень осторожны при использовании SendKeys, так как это может привести к неожиданным результатам, если у вас открыто несколько приложений.
- Вы можете использовать SendKeys для автоматизации небольших задач, таких как сохранение файла Excel, закрытие файла Excel и т. Д.
- Используйте метод SendKeys как последний вариант, когда вы пытаетесь автоматизировать вещи.
Рекомендуемая статья
Это руководство по VBA SendKeys. Здесь мы обсудим, как использовать метод SendKeys в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -
Читайте также: