• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで、なぜかSendkeyが効きません。)

VBAでSendkeyが効かない理由は?

このQ&Aのポイント
  • VBAで作成したマクロに含まれるSendkeyが正常に動作しない現象が発生しています。Excel2003を使用しているが、Excel97を含む他のPCでも同様の現象が起きます。キーロガーを防止するためにウィルスソフトを無効にしたが関係ありませんでした。Sendkeyの行で不適切なキーを押すと、ビービーという音が鳴ります。
  • Sendkeyの部分だけ正常に動作せず、次のコードに進んでしまいます。Sendkeyの行でビービーという音が鳴ります。Excel2003を使用しているが、Excel97を含む他のPCでも同じ現象が発生します。
  • Sendkeyを使用するマクロの一部分が正常に動作せず、次のコードに進みます。Sendkeyの行で不適切なキーを押すと、ビービーという音が鳴ります。Excel2003を使用しているが、Excel97を含む他のPCでも同じ現象が発生します。キーロガーを防止するためにウィルスソフトを無効にしても関係ありません。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >Sendkeyステートメントがどんな仕組みなのか全く知らないので原因が分からないです。 私も、動かない現象自体は、私も悩まされてきた経験はあります。それが、以下で出すようなコードです。もし、動かないとすれば、常駐しているソフトには違いないのですが、セキュリティソフトではなさそうなのです。(以前、試した範囲です) ただし、ステップインではうまく行かないことがあります。 >MS-IMEは削除しATOKにているのでその影響かも知れないです。 私の知っている範囲ですと、ATOK は、MS-Office に入り込むような仕組みにはなっているのですが、Sendkey が動かないということは、ちょっと、今のところ想像がつきませんね。 それで、昔、やっていた方法を披露しておきます。 しょせん、Sendkeyは、どこから送ろうが関係ないから、VBScript のExcel外部から動かす方法を私は考えました。 >これは一度キーボードのソフトに渡されてそこから目的のアプリケーションへキーが送られているんでしょうか。それともVBAから直接にアプリケーションに送られているんでしょうか。 それは、VBAから、ほんの短い間、バッファに入って、送られるようですね。 その理由は、外部ソフトによっては、まとめて、2段階の処理でも、キーの処理は1回でまとめて送っても、2段階の動作が動くからです。 逆に、バッファ自体が、何かで阻止されるか、チェックを受けるようにされていれば、確かに動きません。セキュリティソフトの種類かな? それと、おっしゃるような、「一度キーボードのソフトに渡されてそこから目的のアプリケーションへキーが送られている」という、別のテクニックがあったはずですが、私は、正直なところ、VBAで、そこまでするのかなって思いがあって、あまり追求していないのです。 Dim ReturnValue, I ReturnValue = Shell("CALC.EXE", 1) AppActivate ReturnValue With CreateObject("Wscript.Shell") For I = 1 To 20  .SendKeys I & "{+}", True Next I  .SendKeys "=", True  Application.Wait Now() + TimeValue("00:00:05")  .SendKeys "%{F4}", True End With ところで、念のためなのですが、これらの一連のコードは、私は、VBE からです。ワークシートからではないのです。それと、ちょっと表現が分かりにくいかもしれませんが、Excel自体は、静的な状態でマクロを動かしています。自動保存や時間で動くようなツールは、一切ありません。

miine
質問者

お礼

たびたびすみません。 教えていただいたWscriptを使うとうまくいきました。 こういう解決法があるんですね。 よく分かりませんが、Excelでなく外から送ってやれば動くという事なんでしょうね。 去年このマクロを作った時は正常だったので、その後のインストールとか設定変更の影響なんだろうと思います。 有り難うございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >AppActivate ReturnValue もし、うまくいかないとすると、その部分ですね。 途中で、どこかに触って、Excelに戻ってきてしまっているかもしれません。 場合によったら、こういう方法もありかと思います。  AppActivate "電卓" こちらでは、元のコードは成功はしているものの、本来は、実践では、うまく行かないことが多いようです。実は、私の作ったマクロは、ExcelとIEを行き来するものですが、だいぶ、試行錯誤を重ねてしまいました。Win32 API 自体は面倒なので、使いたくなかったこともあるのですが。 なお、Wait を入れないと、そのコードが生きているか分かりませんね。 Application.Wait Now() + TimeValue("00:00:05") SendKeys "%{F4}", True  'ここの手前にWait を入れます。

miine
質問者

補足

Wendyさんこんばんは。 アドバイス有り難うございます。 AppActivate ReturnValueを含めSendkey以外は正常に実行されます。 タイムウェイトでもステップインでもSendkeyのみ効かない状態で進みます。 一年前は旨くいったので、何か環境変化のせいだと思うのですが、何が影響しているのか分かりません。 Sendkeyステートメントがどんな仕組みなのか全く知らないので原因が分からないです。。 これは一度キーボードのソフトに渡されてそこから目的のアプリケーションへキーが送られているんでしょうか。それともVBAから直接にアプリケーションに送られているんでしょうか。 キーボードドライバやIMEが関係してくるなら、今MS-IMEは削除しATOKにているのでその影響かも知れないです。全くのシロウト考えですが。

関連するQ&A