
No.3ベストアンサー
- 回答日時:
こんにちは。
> キー操作を送りたいのは、ある大手メーカー製のERPシステムです
そうですか....SendKeys は、
1. ウインドウがアクティブでないとダメ
PC によって処理速度が異なります。例えば、ウインドウが開い
てアクティブになるまでの速さ。開発時のPC は 1 秒待ってから
SendKeys ..で良かったはずなのに、別 PC では 5 秒待たなけれ
ばならなかった...ということですね。SendKeys でキー送信して
もウインドウが開いてないんです。一例です。
つまり、開発時の PC と同様の動作は別 PC で保証されません。
2. 2000系OS で Numlock が解除される(今はどうなんだろ?)
などの問題があって、限られた用途「自分しか使わない」のであれば良い
のですが、基本的にオススメできません。SendKeys は最後の手段として
位置づけるのが良いと私は思います。
# 困ったときの SendKeys でもあるんですけどね(´(・)`)
Excel VBA を使う理由が特になければ、Wendy02 さんオススメの UWSC が
私も良いと思います。
どうしても VBA で...というのであれば、PostMessage などの API を
使うことを考えてみて下さい。この場合、ウインドウがアクティブなのか
どうかは関係なく他アプリケーションを操作可能です。
以下はメモ帳(WinXP付属)を VBA で操作するテストコードです。要は、
ハンドルさえ拾えれば大抵のことは SendKeys でなくとも可能です。
ご参考までに...
Option Explicit
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Private Const WM_CHAR As Long = &H102
Private Const WM_COMMAND As Long = &H111
Private Const WM_CLOSE As Long = &H10
Private Const BM_CLICK As Long = &HF5&
Private Const BM_SETCHECK = &HF1
Private Const BST_CHECKED As Long = &H1
Private Const BST_UNCHECKED As Long = &H0
Public Sub Sample()
Dim hWnd As Long
Dim hWnd_C As Long
Dim hWnd2 As Long
Dim hWnd2_C As Long
Dim strtSend As String
Dim i As Long
' クラス名とウインドウ構成は VB 付属の Spy++ で調べました。
' VECTOR などにも似た様なフリーツールは在ります
' メモ帳起動
MsgBox "他アプリケーション制御のサンプルです。メモ帳を起動します"
Application.Visible = False
Shell "Notepad.exe", vbNormalNoFocus
' メモ帳のウインドウハンドルを取得
hWnd = FindWindow("Notepad", "無題 - メモ帳")
' メモ帳の文字入力部のコントロールハンドルを取得
hWnd_C = FindWindowEx(hWnd, 0&, "Edit", vbNullString)
' 文字列送信テスト
strtSend = "教えて!Goo."
MsgBox "メモ帳に文字列「" & strtSend & "」を送信します"
For i = 1 To Len(strtSend)
Call PostMessage(hWnd_C, WM_CHAR, Asc(Mid$(strtSend, i, 1)), 0&)
Next i
' メモ帳のメニューをクリックし「検索」ダイアログを表示
' 「検索」のコマンドID 21 はリソースハッカーを使って調べました
MsgBox "続いて検索ダイアログを表示します", vbInformation
Call PostMessage(hWnd, WM_COMMAND, 21&, 0&)
' ダイアログが開くのを待つ(適当 500ミリ秒)
Sleep 500&
' 検索ダイアログウインドウハンドル
hWnd2 = FindWindow("#32770", "検索")
' チェックボックスのハンドル取得
hWnd2_C = FindWindowEx(hWnd2, 0&, "Button", "大文字と小文字を区別する(&C)")
MsgBox "チェックボックスを ON にします"
Call PostMessage(hWnd2_C, BM_SETCHECK, BST_CHECKED, 0&)
MsgBox "チェックボックスを OFF にします"
Call PostMessage(hWnd2_C, BM_SETCHECK, BST_UNCHECKED, 0&)
MsgBox "検索文字を送信してみます"
hWnd2_C = FindWindowEx(hWnd2, 0&, "Edit", vbNullString)
For i = 1 To Len(strtSend)
Call PostMessage(hWnd2_C, WM_CHAR, Asc(Mid$(strtSend, i, 1)), 0&)
Next i
MsgBox "[キャンセル]ボタンをクリックします"
hWnd2_C = FindWindowEx(hWnd2, 0&, "Button", "キャンセル")
Call PostMessage(hWnd2_C, BM_CLICK, 0&, 0&)
MsgBox " メモ帳を閉じます.[保存しますか?]ダイアログは手動で閉じて下さい."
Call PostMessage(hWnd, WM_CLOSE, 0&, 0&)
Application.Visible = True
End Sub
No.2
- 回答日時:
こんにちは。
Excel VBAは、ほとんどExcel内でしか使えません。
簡単な方法では、こんな風にすれば、動くかとは思います。
Application.Wait Now + TimeValue("00:00:02")
'待ち時間を置くのは、手動で、Activeアプリケーションを返るためです。
'Activeアプリケーションを換えるには、Win32 APIや、WMIを使用します。
CreateObject("Wscript.Shell").SendKeys " "
'IMEのON/Offの状態に影響を受けます。
ただ、もしも、システムパッケージの前に、Excelを初動させ、プロセスを残したまま稼動させるのは、やめたほうがよいですね。何が起こるか安心できません。Excelは、一定のメモリを占有し、また、自動保存などもあります(切ればよいのですが)。
簡易自動システムをお考えになるなら、今は有名になった、「UWSC」って本まで出ているスクリプト言語があります。画面からコマンドを与えるようなつくりになっていますね。使い方は簡単で、記録マクロも出来ますし、コーディングも出来ます。(最初知った時、作者は日本人ではないと思いました。)
このツールの記録マクロでの問題点は、画面のそれぞれのコントロールの位置が重要になるので、画面が動くと、コントロールのクリック等が外れてしまいます。それを避けるには、やはりコーディングによる方法が必要です。これで、1昼夜で、同じ作業を繰り返すことも可能です。
うみうみ屋さん
http://www.h7.dion.ne.jp/~umiumi/
No.1
- 回答日時:
こんにちは。
KenKen_SP です。> sendkeys "{SPACE}",true
Sendkeys " ",True とか(空白スペースをそのまま送信です)
> 他のアプリケーションにキー操作を送りたい...
Sendkeys ですか...ちなみにどのアプリケーションなのでしょうか?
この回答への補足
KenKen_SPさん、ありがとうございます。
キー操作を送りたいのは、ある大手メーカー製のERPシステムです。
今回、システムを起動し、メニュー画面からCtrl+Fでセッション検索をさせたいと思っているのですが、検索ダイアログボックスの表示まではいけるのに、条件設定のチェックボックスへのOn/Off切り替えがうまくできなくて困っています。基本的にWindows/Unix環境では他のアプリと同じキー操作が使えるようなのですが(実際通常操作だとスペースキーでのOn/Off切り替えも可能)、VBAでは限界ということでしょうか・・・?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) vba sendKeysを送る相手のソフトを前面に開くには 1 2023/07/20 16:42
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- マウス・キーボード パソコンのファンクションキー(F12)をきかなくできないでしょうか? 3 2022/05/25 18:01
- その他(パソコン・スマホ・電化製品) レジ操作について 2 2022/11/06 19:41
- マウス・キーボード パソコンのspaceキーの下にあるマウスコントロールできるキーが昔から動かないので、ブルートゥースの 5 2022/07/18 02:08
- Windows 10 Windows10でボリュームのアップダウンを簡単にできる方法ないですか? 1 2023/06/20 13:06
- Google Maps Blue stacks 5 のキーマッピング方法。 1 2022/09/09 21:33
- Visual Basic(VBA) VBAでシートの保護をかける際に「書式設定の変更」を有効にする 1 2023/04/17 18:18
- マウス・キーボード real vnc viewer で遠隔先で操作が出来ない。 2 2023/07/24 15:00
- オンラインゲーム 初めてのPCゲームにおけるおすすめ。 この度ゲーミングPCを初めて自作しました。 ただ今までCS機で 2 2022/08/09 04:08
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
全角/半角キーをSendkeys関数で使用できますか?
Visual Basic(VBA)
-
-
4
VBSでのSendKeysでの画面の最小化
その他(プログラミング・Web制作)
-
5
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
6
vbaから他のアプリを終了
Visual Basic(VBA)
-
7
VBAでIEを操作、ポップアップされた画面の処理(Enter)を行いたい
Visual Basic(VBA)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
SendKeysの使い方について
Visual Basic(VBA)
-
13
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
14
エクセルVBAでNumLockキーの状態を確認する
Excel(エクセル)
-
15
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
16
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
17
バッチファイルでキー操作を行う。
その他(プログラミング・Web制作)
-
18
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
19
【sendkeysメソッドが動かずに苦慮しております】
Visual Basic(VBA)
-
20
エクセル VBA SendKeys ループ処理について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教科書などに初めから書いてあ...
-
Excel:任意の列だけCSV形式で...
-
CDやDVDに書くマジックペン
-
大学を平日一日休んで運転免許...
-
緑ペン×赤シートで消えないペー...
-
小6でこの絵上手いですか? ア...
-
日頃、感じる不便なものってあ...
-
パソコン買い替え時のAcce...
-
フリクションペンで書いたもの...
-
テプラのテープカートリッジを...
-
プロジェクタだと動画が映らない
-
「筆記用具」という言葉はノー...
-
くっついた消しゴムかすをとる...
-
書いたり消したりできるラミネ...
-
プラスチックのスマホケースに ...
-
ぺたろうの代わりが欲しい パソ...
-
高校生です。マックでバイトし...
-
消しゴムがくっついて、跡が取...
-
ペンタブレット。ペンを移動す...
-
メモ帳の一部をワードへコピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
書いたり消したりできるラミネ...
-
教科書などに初めから書いてあ...
-
CDやDVDに書くマジックペン
-
大学を平日一日休んで運転免許...
-
Excel:任意の列だけCSV形式で...
-
消しゴムがくっついて、跡が取...
-
「覚書」、「メモ」、「備忘録...
-
両面印刷するとき裏表とも罫線...
-
Windows10で、拡張子が.pyのフ...
-
VBAでメモ帳にコピペをしたいの...
-
日頃、感じる不便なものってあ...
-
色鉛筆の箱の修理について
-
Wordで 文字の一部にモザイクを...
-
メモ帳のテキストがいつのまに...
-
ぺたろうの代わりが欲しい パソ...
-
「筆記用具」という言葉はノー...
-
メモ帳でタブ幅の設定はできる...
-
字が下手すぎて祝儀袋を持って...
-
PCの画面上に文字や線を引ける...
-
プロジェクタだと動画が映らない
おすすめ情報