[[20091104105322]] 『VBのSendkeysについて』(重機太郎) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBのSendkeysについて』(重機太郎)

WindowsXPのExcel2000です。

初めて投稿します。宜しくお願い致します。
久しぶりにVBを使って業務の効率化を図ろうとしたのですが、初歩的な所で
ハマってしまいました、助けて下さい。

要約すると、下記の様なマクロを作りました。
セルD1にAを入力してエンターを押し、セルA1に戻す。

Sub Macro1()

    Range("D1").Select
    SendKeys "{A}{ENTER}"
    Range("A1").Select
End Sub

これを実行すると、何故か、セルA1にAと入力されてしまいます。

何故なんでしょう?


 Sendkeysで、「A」「Enter」を送れ、という命令が実行されるよりもA1セルが選択される処理のほうが早いためです。

 SendKeysは(大雑把に言うと)OSに対して「キーコードを送って」と伝える命令です。
 そのままではOSに伝えた後にすぐ次の命令に移ってしまうためA1セルが選択された後にOSがキーを送る事になります。

 SendKeysのWait引数にTrueを指定して

 SendKeys "{A}{ENTER}",True
 としてみてください。

 >wait 省略可能です。名前付き引数 string の転送によって行われる処理が終了するまで、実行を一時中断するか
 >どうかを次に示すブール型 (Boolean) の値で指定します。 
 >(既定値) Falseプロシージャの終了を待たずに次の行に制御を移します。
 >True処理が終了するまで実行を一時中断します。
 (独覚)

 Sub Macro1()
    Range("D1").Value = "A"
    Range("A1").Select
 End Sub

 ではダメなのでしょうか?
 (momo)

独覚さんへ:
早速の丁寧なご回答ありがとうございます。
末尾にTrueで出来ました。
助かりました。

momoさんへ:
ありがとうございます。
AをD1に入力するだけなら確かにそうなんですけど、
やりたい事はもう少しだけ複雑?で、Sendkeysの機能が使いたかったのです。

(重機太郎)


 Sendkeysは、本当にどうしようもないんで取りあえずこうしとくか みたいな方法です。
 しかも、正常に作動しないことが多々あります。
 まずは、この

 >やりたい事はもう少しだけ複雑?

 をSendkeysなしで実現することを検討されたほうが良いと思いますけどねえ!!

 この掲示板では、苦肉の策で投稿することもありますが、自分の仕事ではまず使いません。

 再度、検討してみてください。

 ichinose


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.