一年くらい前に作ったSendkeyを含んだマクロをまた使うことになりました。
再使用してみると、他のコードの部分は正常なのにSendkeyの部分だけが正常作動せず、空打ちしたように変化しないまま次のコードに移ります。
Excel2003使用ですが、Excel97の入った他のPCでやっても同じ現象が起こります。
そこで、テストにヘルプのSendkey例文をVBEに貼り付けてみましたが、やはりその部分だけ作業せず先へ進んでしまいます。
Sendkeyの行では、不適切なキーをキーボードから打った時によく鳴るビービーという音がPCから聞こえてきます。
自分が基本的な操作を1つ忘れているのじゃないかと思うのですが、それが何なのか見当が付きません。
なにかお気づきの点はないでしょうか?
キーロガーを防止の為、ウィルスソフトがはねているのかと思いOFFにしてみましたが、関係ありませんでした。
テストした例文は下記です。
Sub x()
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1)
AppActivate ReturnValue
For I = 1 To 20
SendKeys I & "{+}", True
Next I
SendKeys "=", True
SendKeys "%{F4}", True
End Sub
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自体は、静的な状態でマクロを動かしています。自動保存や時間で動くようなツールは、一切ありません。
たびたびすみません。
教えていただいたWscriptを使うとうまくいきました。
こういう解決法があるんですね。
よく分かりませんが、Excelでなく外から送ってやれば動くという事なんでしょうね。
去年このマクロを作った時は正常だったので、その後のインストールとか設定変更の影響なんだろうと思います。
有り難うございました。
No.1
- 回答日時:
こんばんは。
>AppActivate ReturnValue
もし、うまくいかないとすると、その部分ですね。
途中で、どこかに触って、Excelに戻ってきてしまっているかもしれません。
場合によったら、こういう方法もありかと思います。
AppActivate "電卓"
こちらでは、元のコードは成功はしているものの、本来は、実践では、うまく行かないことが多いようです。実は、私の作ったマクロは、ExcelとIEを行き来するものですが、だいぶ、試行錯誤を重ねてしまいました。Win32 API 自体は面倒なので、使いたくなかったこともあるのですが。
なお、Wait を入れないと、そのコードが生きているか分かりませんね。
Application.Wait Now() + TimeValue("00:00:05")
SendKeys "%{F4}", True 'ここの手前にWait を入れます。
この回答への補足
Wendyさんこんばんは。
アドバイス有り難うございます。
AppActivate ReturnValueを含めSendkey以外は正常に実行されます。
タイムウェイトでもステップインでもSendkeyのみ効かない状態で進みます。
一年前は旨くいったので、何か環境変化のせいだと思うのですが、何が影響しているのか分かりません。
Sendkeyステートメントがどんな仕組みなのか全く知らないので原因が分からないです。。
これは一度キーボードのソフトに渡されてそこから目的のアプリケーションへキーが送られているんでしょうか。それともVBAから直接にアプリケーションに送られているんでしょうか。
キーボードドライバやIMEが関係してくるなら、今MS-IMEは削除しATOKにているのでその影響かも知れないです。全くのシロウト考えですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
【sendkeysメソッドが動かずに苦慮しております】
Visual Basic(VBA)
-
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
ExcelVBAでスペースキー操作したい
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
エクセル VBA SendKeys ループ処理について
Excel(エクセル)
-
6
ドロップダウンリスト 自動表示したい
Excel(エクセル)
-
7
エクセルVBAで SendKeys {TAB}""
Excel(エクセル)
-
8
vbaから他のアプリを終了
Visual Basic(VBA)
-
9
エクセルVBAでF2(ファンクション2)と同じ処理をしたい
Excel(エクセル)
-
10
ExcelVBAでセルを編集状態にする方法
Excel(エクセル)
-
11
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
12
ExcelマクロのSendkeysで処理途中に次のキーが送られる
Excel(エクセル)
-
13
SendKeysを使いたい。
Visual Basic(VBA)
-
14
Vba アプリケーションが立ち上がるまで待つ
Excel(エクセル)
-
15
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
16
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
17
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
18
WSH動作しない!!(WScript.SleepとSendKeys?)
その他(プログラミング・Web制作)
-
19
DoEventsがやはり分からない
Visual Basic(VBA)
-
20
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲームの画面を常にアクティヴ...
-
VBAで、なぜかSendkeyが効きま...
-
パソコンキーボードのエンター...
-
範囲を指定してスクショを撮れ...
-
タイマーで自動的にキーを押す...
-
キーを長押しするツールを探し...
-
同じファイルを連番などでひた...
-
ウィンドウを最前面に固定する...
-
マウスのサイドボタンにショー...
-
画面キャプチャをベクター画像...
-
インターネットの画像を直接切...
-
ネット上の地図をPCに画像と...
-
特殊なマウスマクロ
-
カーソルを2つにして同じ動き...
-
自動でenterを連打するソフトが...
-
イラストレーターのレイヤーパ...
-
A4サイズのPDFデータを2枚合わ...
-
マティスみのりやまと EBに似て...
-
フォルダ内のファイルを手動で...
-
窓の杜やフリーソフト100は安全...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ゲームの画面を常にアクティヴ...
-
パソコンキーボードのエンター...
-
VBAで、なぜかSendkeyが効きま...
-
キーを長押しするツールを探し...
-
タイマーで自動的にキーを押す...
-
範囲を指定してスクショを撮れ...
-
自動でenterを連打するソフトが...
-
同じファイルを連番などでひた...
-
ゲームパッドのボタン配置の入...
-
マウスカーソルをレーザーポイ...
-
ネット上の地図をPCに画像と...
-
カーソルを2つにして同じ動き...
-
Photoshop に代わるソフトはあ...
-
1秒毎にキーの←を押すソフト
-
画面キャプチャをベクター画像...
-
スクロールキャプチャ、成功し...
-
インターネットの画像を直接切...
-
イラストレーターのレイヤーパ...
-
マウスのクリックをキーボード...
-
マウスの操作を逆にしたい
おすすめ情報