- ベストアンサー
ACCESS97 VBA のSendKeys
以前Windows2000ProやWindowsXP Pro ACCESS97のVBAでShell関数を利用し 別のソフトを起動 その後Timerイベントで SendKeysを実行し別のソフトを操作していました。 しかし最近購入したパソコン(WindowsXP Pro)で 実行したところ別のソフトは起動しますが Sendkeysの操作が実行されません。 なぜでしょうか? 以前のパソコンと最近購入したパソコンの違いは 以前のパソコンは購入時SP1で Windows UPdateでSP2にしたこと セキュリティーソフト(Nortonを使用しています)の バージョンが異なるぐらいです。 ( もちろん起動する別のソフトは、許可にしています) Sendkeysの操作が実行されるようにする 設定を教えてください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SendKeysの処理は、送るタイミングがデリケートで、環境によってはウェイトが必要になります。 まず、AppActivateの二番目の引数を True にして、アクティブになるまで待って下さい。 それでもうまく行かないなら、下記の様にウェイトを入れて下さい。 ウェイトは大きめにしておけば安心ですが、大きすぎるとその分、処理に時間がかかります。 ----サンプル---- Private Sub test() Dim RtnVal RtnVal = Shell("notepad.exe", 1) wait 0.1 AppActivate RtnVal, True wait 0.1 SendKeys "12345", True End Sub Private Sub wait(sec As Single) Dim st As Single st = Timer() Do Until Timer() > st + sec DoEvents Loop End Sub
その他の回答 (1)
- teto_pun2
- ベストアンサー率41% (12/29)
良くありそうな話ですが、SendKeysはアクティブなWindowにキーを送ります。 従って、SendKeysを送るタイミングが悪く、アクティブなWindowでない場合に送っていないか確認してください。 または、API関数のSetActiveWindow 等で、アクティブにしてからSendkeysを行っては?
補足
回答ありがとうございます。 ACCESS97 VBAで下記のプログラムのように 実行していますので アクティブになっていると思います。 RtnVal = Shell(他のプログラム, 1) AppActivate RtnVal SendKeys ... 何か別の対処方法があれば 教えてください。 よろしくお願いします。
お礼
回答ありがとうございました。 実際にテストしてみたところ うまくできました。 ありがとうございました。