• ベストアンサー

ACCESS97 VBA のSendKeys

以前Windows2000ProやWindowsXP Pro ACCESS97のVBAでShell関数を利用し 別のソフトを起動 その後Timerイベントで SendKeysを実行し別のソフトを操作していました。 しかし最近購入したパソコン(WindowsXP Pro)で 実行したところ別のソフトは起動しますが Sendkeysの操作が実行されません。 なぜでしょうか? 以前のパソコンと最近購入したパソコンの違いは 以前のパソコンは購入時SP1で Windows UPdateでSP2にしたこと セキュリティーソフト(Nortonを使用しています)の バージョンが異なるぐらいです。 ( もちろん起動する別のソフトは、許可にしています) Sendkeysの操作が実行されるようにする 設定を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.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

life0305
質問者

お礼

回答ありがとうございました。 実際にテストしてみたところ うまくできました。 ありがとうございました。

その他の回答 (1)

  • teto_pun2
  • ベストアンサー率41% (12/29)
回答No.1

良くありそうな話ですが、SendKeysはアクティブなWindowにキーを送ります。 従って、SendKeysを送るタイミングが悪く、アクティブなWindowでない場合に送っていないか確認してください。 または、API関数のSetActiveWindow 等で、アクティブにしてからSendkeysを行っては?

life0305
質問者

補足

回答ありがとうございます。 ACCESS97 VBAで下記のプログラムのように 実行していますので アクティブになっていると思います。 RtnVal = Shell(他のプログラム, 1) AppActivate RtnVal SendKeys ... 何か別の対処方法があれば 教えてください。 よろしくお願いします。

関連するQ&A