
一年くらい前に作った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で SendKeys {TAB}""
Excel(エクセル)
-
5
ドロップダウンリスト 自動表示したい
Excel(エクセル)
-
6
エクセル VBA SendKeys ループ処理について
Excel(エクセル)
-
7
SendKeysの使い方について
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
ExcelマクロのSendkeysで処理途中に次のキーが送られる
Excel(エクセル)
-
10
sendkeysにてALT+CTRL+INSERTを同時に行いたい
Visual Basic(VBA)
-
11
vba で illustrator に sendkey ^a" を送っても効かない"
Visual Basic(VBA)
-
12
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
13
エクセルの印刷ダイアログをSendkeysで操作したい。
PowerPoint(パワーポイント)
-
14
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
15
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
18
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
19
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
20
vbaでIEの名前を付けて保存(A)をしたい
Microsoft ASP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲームの画面を常にアクティヴ...
-
VBAで、なぜかSendkeyが効きま...
-
パソコンキーボードのエンター...
-
タイマーで自動的にキーを押す...
-
画面キャプチャをベクター画像...
-
自動でenterを連打するソフトが...
-
マウス 動作反転ソフトはあり...
-
PCゲームのウインドサイズの変更
-
マウスのクリックをキーボード...
-
ウインドウズ画面のハードコピー
-
【window10・時間指定で動作す...
-
マウスのカーソル操作
-
キーを長押しするツールを探し...
-
A4サイズのPDFデータを2枚合わ...
-
破損CDなどからファイルを復...
-
デスクトップをウロウロする紫...
-
顔写真等の画像をルーレット形...
-
動画の再生プレイヤーについて...
-
窓の杜やフリーソフト100は安全...
-
PDFファイル内の文章の文字が重...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ゲームの画面を常にアクティヴ...
-
VBAで、なぜかSendkeyが効きま...
-
パソコンキーボードのエンター...
-
タイマーで自動的にキーを押す...
-
キーを長押しするツールを探し...
-
同じファイルを連番などでひた...
-
カーソルを2つにして同じ動き...
-
範囲を指定してスクショを撮れ...
-
スクロールキャプチャ、成功し...
-
ファイルを並べ替えて順番にナ...
-
画面キャプチャをベクター画像...
-
マウスの操作を逆にしたい
-
jpeg画像の編集について
-
昔のあのお絵かきソフトの名前...
-
1秒毎にキーの←を押すソフト
-
マウス 動作反転ソフトはあり...
-
マウスのカーソル操作
-
WindowsとMacのIllustrator
-
セットアップで同意ボタンが押...
-
ネット上の地図をPCに画像と...
おすすめ情報