
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で質問しましょう!
似たような質問が見つかりました
- vba sendKeysを送る相手のソフトを前面に開くには
- ファイルエクスプローラーでフォルダを閉じる操作について
- パソコンのファンクションキー(F12)をきかなくできないでしょうか?
- レジ操作について
- パソコンのspaceキーの下にあるマウスコントロールできるキーが昔から動かないので、ブルートゥースの
- Windows10でボリュームのアップダウンを簡単にできる方法ないですか?
- Blue stacks 5 のキーマッピング方法。
- VBAでシートの保護をかける際に「書式設定の変更」を有効にする
- real vnc viewer で遠隔先で操作が出来ない。
- 初めてのPCゲームにおけるおすすめ。 この度ゲーミングPCを初めて自作しました。 ただ今までCS機で
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
vbaから他のアプリを終了
Visual Basic(VBA)
-
-
4
VBSでのSendKeysでの画面の最小化
その他(プログラミング・Web制作)
-
5
EXCEL VBAから他アプリケーションを操作することは可能ですか?
Visual Basic(VBA)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
sendkeysにてALT+CTRL+INSERTを同時に行いたい
Visual Basic(VBA)
-
8
VBAで任意のウインドウのサイズを変更する方法
Visual Basic(VBA)
-
9
ExcelマクロのSendkeysで処理途中に次のキーが送られる
Excel(エクセル)
-
10
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
11
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
12
エクセル VBA SendKeys ループ処理について
Excel(エクセル)
-
13
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
14
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
15
vb.netでフォーカスされているチェックボックスにチェックするには?
Visual Basic(VBA)
-
16
全角/半角キーをSendkeys関数で使用できますか?
Visual Basic(VBA)
-
17
エクセルVBAでIME入力モードの制御
Excel(エクセル)
-
18
【sendkeysメソッドが動かずに苦慮しております】
Visual Basic(VBA)
-
19
起動したアプリケーションを最大化したいのですが。(VB.NET)
Visual Basic(VBA)
-
20
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
小6でこの絵上手いですか? ア...
-
Surface Pro7のペンを失くして...
-
教科書などに初めから書いてあ...
-
くっついた消しゴムかすをとる...
-
プロジェクタだと動画が映らない
-
日頃、感じる不便なものってあ...
-
Windows10で、拡張子が.pyのフ...
-
消しゴムがくっついて、跡が取...
-
CDやDVDに書くマジックペン
-
書いたり消したりできるラミネ...
-
GAMONの液タブの画面が反応しま...
-
液タブを使っている時ペンが消...
-
指を動かす人・・・。
-
サッカーボールへ名前入れの方...
-
ノートPC、斜めで使用したら...
-
お花代封筒について
-
「覚書」、「メモ」、「備忘録...
-
プラスチックのスマホケースに ...
-
VBAでメモ帳にコピペをしたいの...
-
球体に曲線をきれいに描く方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日頃、感じる不便なものってあ...
-
プロジェクタだと動画が映らない
-
Excel:任意の列だけCSV形式で...
-
教科書などに初めから書いてあ...
-
小6でこの絵上手いですか? ア...
-
メモ帳のテキストがいつのまに...
-
Windows10で、拡張子が.pyのフ...
-
元の状態に戻すことを何と言う...
-
くっついた消しゴムかすをとる...
-
書いたり消したりできるラミネ...
-
「覚書」、「メモ」、「備忘録...
-
VBAでメモ帳にコピペをしたいの...
-
PCの画面上に文字や線を引ける...
-
WORDだけ使えれば良いノー...
-
両面印刷するとき裏表とも罫線...
-
メモ帳でタブ幅の設定はできる...
-
PrintScreenキーが効かなくなり...
-
Wordで 文字の一部にモザイクを...
-
消しゴムがくっついて、跡が取...
-
フリクションペンで書いたもの...
おすすめ情報