• ベストアンサー

VBAでコマンドプロンプトーsendkesy

いつもお世話になっています。今日はExcelVBAでコマンドプロンプトを起動した後、それにVBAから文字列を入力、認識させるやり方を教えて頂きたいのです。 コマンドプロンプトにて、日本語及び変数に入れた文字列を入れる方法を教えて頂きたいのです。 たとえばですが、 Dim outstrin as string sendkeys "辞典",true sendkeys outstring,true どちらも日本語が入っています。単にキーボードからのキーを入力させるのではなくて、文字列を認識させたいと思っています。 変数などで入力すると、コマンドプロンプトの上では表示されるのですが、なぜか「エンターキー」を認識せずに、困っています。 エンターを入れると、コマンドプロンプト閉じたりするときもあります。 もしかして、この文字列入力のやり方に問題があるのでは?と思っています。 それ以外にも原因があるかもしれません。もしかしたら、ただのアルファベットや数値を入力するといった単純なことからできていないかもしれません。たまに認識しませんもので・・・。一応本の通りしていますが・・・初めての経験なのでとても苦労しています。本もあまり「sendkeys」については詳しく載っていなくて、もっぱらVBAのヘルプを見ているだけです。 「sendkeys」を使うに当たっての注意点なども教えてくださると幸いです。 書店で本を見たり、ネットで調べたりもしたのですが・・・なかなか丁度いいのを知ることはできませんでした。 ご存じのお方、どうかお助けください。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>どちらも日本語が入っています。単にキーボードからのキーを入力させるのではなくて、文字列を認識させたいと思っています。 この時点でSendKeysでできません。 SendKeysはキーを入力させるものです。 >たまに認識しませんもので・・・。 SendKeysはアクティブなウィンドウに対し、キーストロークを送る関数です。 対象のウィンドウがアクティブになっていて、キー入力を受け付ける状態になっていないといけません。 アクティブウィンドウなんて、マウスで別のところをクリックしたりすればすぐに変わるようなものなんで、SendKeysを使って確実に動作させるようなことはそもそも不可能です。

quincy
質問者

お礼

回答ありがとうございます。そうなんですか・・全然知らなかった。この関数は名前の通りなんですね。確実にできないことがわかって逆に助かりました。ありがとうございます。また何かありましたらアドバイスよろしくお願いします。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

sendkeyは文字コードを合成する訳ではなく、キーストロークを合成するだけです。キーボードをどこか押しただけで日本語は入りません。 半角/全角キー → a → 変換 で初めて「あ」になる訳で。 しかしながら、なぜか変数を使って、例えばsendkeys outstring,trueというコードで文字列を送ることが出来ます。この辺の仕様はなぞです。但し内部的には不可思議な事態になっているようです。環境次第ですがinsertキーが押されていたりします。 あるいはクリップボードを使って、 "^C" や "^V" でコピペしまうという方法もあります。 まぁ1番さんも指摘している通り、キーストロークを再現しているだけですので全く同じコードでもPCや環境、常駐ソフトの違いなどで処理時間が変わるため、常に同じ動作になるとは限りません。Enterキーが押されるタイミングが0.1秒早いとウィンドウが閉じてしまうが、0.1秒遅いとちゃんと認識するとか。 ということである文字列をどこかの表示させるというだけなら割といけますが、ちょっと複雑になると「この文字列入力のやり方に問題が」ありまくりです。 何がしたいのか具体的に書けばもっとより効率的・安定的な手法がアドバイスされるかと思います。

quincy
質問者

お礼

回答ありがとうございます。そうか・・・無理なんですね。何とかならないかといろいろ考えていたんですが。でもできないことがわかってちょっとほっとしました。他のやり方をすることにします。ありがとうございます。また何かありましたら、よろしくお願いします。

関連するQ&A