SendKeys не всегда работает
Я использую .SendKeys()
в Excel VBA для отправки штрихов клавиш во внешнее окно, которое я делаю активным с помощью shell .AppActive
метод. Проблема в том, что SendKeys
просто не ведет себя последовательно и иногда отправляет ключи, а иногда и нет. Я думаю, что это имеет какое-то отношение к хранению ключей в буфере в соответствии с документацией MSDN.
как обойти это?
2 ответов
вы можете использовать Autoit, который более надежен, чем SendKeys.
загрузить Autoit из ссылки ниже http://www.autoitscript.com/site/autoit/downloads/
добавить в ссылку autoit addin AutoItX3 Библиотека Тип 1.0
Ниже приведен пример кода, который откроет калькулятор и введите 123456789
Sub sendkeys()
'Open a calc
StartCalculator
Dim au As New AutoItX3Lib.AutoItX3
au.AutoItSetOption "WinTitleMatchMode", 2
au.WinActivate "Calculator"
'send key strokes
au.ControlClick "Calculator", "", "Button5"
au.ControlClick "Calculator", "", "Button11"
au.ControlClick "Calculator", "", "Button16"
au.ControlClick "Calculator", "", "Button4"
au.ControlClick "Calculator", "", "Button10"
au.ControlClick "Calculator", "", "Button15"
au.ControlClick "Calculator", "", "Button3"
au.ControlClick "Calculator", "", "Button9"
au.ControlClick "Calculator", "", "Button14"
End Sub
Sub StartCalculator()
Dim Program As String
Dim TaskID As Double
On Error Resume Next
Program = "calc.exe"
TaskID = Shell(Program, 1)
If Err <> 0 Then
MsgBox "Can't start " & Program
End If
End Sub
я обнаружил, что решение этой проблемы состояло в том, чтобы просто сделать паузу приложения на короткое время. Это, кажется, позволяет буферу очистить (поправьте меня, если я ошибаюсь, пожалуйста).
чтобы сделать Excel VBA sleep, я выставил функцию Windows API Sleep
написав в верхней части модуля:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
а потом после каждого SendKeys
команда, я просто использовал:
Sleep 1
и буквально, 1 миллисекунда сделала всю разницу, и ключи всегда были отправлено правильно.