目次
処理の順番が前後する
VBA の「SendKeys」と「SendKeys」の間に「SendKeys」以外の VBA の処理を挟んだところ、処理の順番が前後してしまってイメージ通りに処理が行われないので、その対処方法をテストしてみました。
ご注意ください
私の場合、 SendKeys ステートメントを使用したマクロを実行する度に「NumLock」が OFF になってしまいます。
原因は不明ですが、「NumLock」キーを押すと ON に戻ったので、そのままにしています。
修正前のマクロ
VBA の処理の順番が前後してしまうマクロは、下記のソースコードの内容になっています。 SendKeys の途中に「Range("c2").Select」の命令を挟んでいます。
Sub VBAの処理の順番が前後してしまうマクロ()
Cells.ClearContents '全セル内容消去
SendKeys "a{ENTER}", True 'a を入力
SendKeys "b{ENTER}", True
SendKeys "c{ENTER}", True
Range("c2").Select 'c2 セルを選択
SendKeys "d{ENTER}", True
SendKeys "e{ENTER}", True
SendKeys "f{ENTER}", True 'f を入力
End Sub
上記マクロを「B2」セルを選択した状態で実行すると、「C2:C7」の範囲に a ~ f の文字が入力されてしまいます。
「Range("c2").Select」の VBA の処理を途中に挟んでいるので、「B2:B4」の範囲に a ~ c 、「C2:C4」の範囲に d ~ f が入力されるものと思っていましたが、イメージ通りに動作しません。
「Range("c2").Select」の命令自体は、「B2」セルでマクロを実行して「C2」セルから文字の入力がスタートしているので動作はしているようです。
何故か「SendKeys」の前に実行されているようです。
1 回目の「SendKeys」の前に記述してある「Cells.ClearContents」の命令は動作しているようです。
マクロの実行結果
下記の画像の状態で上記のマクロを実行してみます。「B2」セルが選択されていて、「B2:B4」の範囲に 1,2,3 と入力されています。
Excel アプリの「ツール > オプション > 編集」の「入力後にセルを移動する」のチェックは「ON」、方向は「下」になっています。
文字の半角全角の入力モードは「半角」にしています。
マクロを実行してみると、以下の画像の結果になりました。「C2:C7」の範囲に a ~ f の文字が入力されています。
全セルの内容消去「Cells.ClearContents」は「SendKeys」で文字が入力される前に実行されているようです。
DoEvents を追加したマクロ
色々と試してみた結果、正しい方法なのかは分かりませんが、「DoEvents」を追加して実行してみるとイメージ通りの結果になりました。
SendKeys 以外の VBA の操作が行われるように途中で制御が戻って来たようです。
Sub DoEvents追加_VBAの処理の順番が前後してしまうマクロ()
Cells.ClearContents '全セル内容消去
SendKeys "a{ENTER}", True 'a を入力
SendKeys "b{ENTER}", True
SendKeys "c{ENTER}", True
DoEvents 'SendKeys 以外の VBA の命令の前に追加しました
Range("c2").Select 'c2 セルを選択
SendKeys "d{ENTER}", True
SendKeys "e{ENTER}", True
SendKeys "f{ENTER}", True
End Sub
上記マクロを実行してみると、以下の画像の結果になりました。
「SendKeys」と「SendKeys」の間の「Range("c2").Select 」の命令が途中で順番通りに実行されたようです。
テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。