Excel VBA에서 .SendKeys()
을 사용하여 쉘 .AppActive
메서드를 사용하여 활성 상태로 만드는 외부 윈도우에 키 입력을 보냅니다. 문제는 SendKeys
이 단순히 일관되게 동작하지 않으며 때로는 키를 보내고 때로는 전송하지 않는 것입니다. MSDN 설명서에 따라 버퍼에 키를 저장하는 것과 관련이 있다고 생각합니다.SendKeys가 항상 작동하지 않는 경우
어떻게이 문제를 해결할 수 있습니까?
Excel VBA에서 .SendKeys()
을 사용하여 쉘 .AppActive
메서드를 사용하여 활성 상태로 만드는 외부 윈도우에 키 입력을 보냅니다. 문제는 SendKeys
이 단순히 일관되게 동작하지 않으며 때로는 키를 보내고 때로는 전송하지 않는 것입니다. MSDN 설명서에 따라 버퍼에 키를 저장하는 것과 관련이 있다고 생각합니다.SendKeys가 항상 작동하지 않는 경우
어떻게이 문제를 해결할 수 있습니까?
이 문제에 대한 해결책은 잠시 동안 응용 프로그램을 일시 중지하는 것이 었습니다. 이것은 버퍼를 지우는 것을 허용하는 것 같다. 다음 모든 SendKeys
명령 후, 난 그냥 사용
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
그리고 :
Sleep 1
엑셀 VBA 잠을하기 위해
, 나는 모듈의 상단에 작성하여 Windows API 함수
Sleep
노출
글자 그대로 1 밀리 초가 모든 차이를 만들었고 키는 항상 올바르게 전송되었습니다.
SendKeys보다 안정적인 Autoit을 사용하는 것이 좋습니다. 링크 http://www.autoitscript.com/site/autoit/downloads/
아래에서
다운로드 AutoIt이는 참조 AutoIt이 추가 기능 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
감사! 너를 사랑해! :-) – GTAVLover
당신이 실행할 문제는 PROD가 아니라 DEV 환경에서 작동한다는 것입니다. 또는 ... PROD 환경에서 작동 할 수도 있습니다 ... 가끔씩 ... 작동을 멈 춥니 다. 하드 코딩 된 지연은 결코 좋지 않습니다. 그러나 이것은 귀하의 목적을 위해 괜찮을 수도 있습니다. – robnick