- ベストアンサー
EXCEL VBAから他アプリケーションを操作することは可能ですか?
こんばんは。 VBAの本を購入し勉強していますが、VBAと他アプリケーションとの連携について記載が少なく(txtやcsvファイル操作)、どこまで出来るんだろうという不安があり質問しました。 (1)EXCEL VBAから他アプリケーションを起動し、設定操作、命令を送り操作することは可能でしょうか? イメージとしては他アプリに一方的に命令を送り操作できれば良しです。(アプリ側からのリターン要求はしません。) (2)第2の質問です。 VBAで他アプリを起動した状態で人が操作している感覚でマウスを操作できますか?(利用方法:他アプリの●ボタンを押したい!!) 目の前にソフトがあるのに触る操作は出来ないものでしょうか? いろいろ調べて見ましたが、この様な事例はありません。 駄目元ですが、こんな操作を知っていましたら教えてください。 こんな操作ができればいいな~
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2,4 です。 > EXCEL2000内の特定のセルに規定値外のデータが入力された場合に > UWSCを起動して... UWSC のスクリプトが完成しているとすれば、起動オプション付きで バッチ処理すれば良いでしょう。実行タイミングは、シートまたは ThisWorkbook の Change イベントが使えます。 例)シートモジュール Private Const EXE_PATHNAME As String = "C:\Program Files\uwsc\uwsc.exe" Private Const DQ As String = """" Private Sub Worksheet_Change(ByVal Target As Range) Dim rChange As Range Dim sCommand As String Dim sScriptFile As String ' // 実行する UWSC スクリプト sScriptFile = "C:\sample.uws" ' // UWSC の起動オプションは UWSC のヘルプを参照 sCommand = DQ & EXE_PATHNAME & DQ & " " & _ DQ & sScriptFile & DQ ' // 変更されたのが単一セルかつ A 列でなければ終了 If Target.Cells.Count > 1 Then Exit Sub Set rChange = Intersect(Target, Columns("A")) If rChange Is Nothing Then Exit Sub End If ' // さらに値が TEST だった場合のみ実行 If rChange.Value = "TEST" Then Shell sCommand, vbNormalFocus End If End Sub
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> ところでUWSC自体をVBA(外部)から操作することは可能ですか? 具体的にどんなことですか?
補足
KenKen_SPさん何度もお付き合いいただきありがとうございます。 具体的にはEXCEL2000内の特定のセルに規定値外のデータが入力された場合にUWSCを起動してデジタル出力ボードの アプリケーションソフトを起動して、ビット1のIOを”ON”(警報が出す)という操作をしたいと思っています。 このデジタル出力ボードにはソフトが付随されて来たのですが、ソフトの中身を編集出来そうもありません。 そこでVBAよりマウス操作して操作したいと考えました。
- nikoniko_009
- ベストアンサー率75% (3/4)
>私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、 >EXCELがアクティブになってしまっている様な気がします。 多分、マウスカーソルの(100, 10)の位置にメモ帳のウィンドウがなかったのが原因だと思います。このように画面のどの位置に何があるか把握しておかないとマウス操作は困難です。 ペイントツールを最大化で起動するようにしておけば、ある程度予測はできます。 >私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。 >例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか? >こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。 私も昔、同じ事を行おうとして探してみましたが参考になりそうなものがなくて、WEBで調べ試行錯誤した結果、あのような形に行き着きました。 >画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を >マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?) >マウスポイントの法則がわかりましたら教えてください。 ディスプレイの表示画面のポイントになります。
お礼
ご回答ありがとうございます。 アクティブが切り替わってしまう理由は理解できました。 参考書はやはり無い様ですね。 ディスプレイ表示画面のと座標の関係は手探りで法則性を見付けてみます。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 > 画面設定などで異なるかも知れませんが法則性があるなら、色々 > 調べるより一度ソフトを操作した手順をマクロに記録すれば良い。 その通りだと思いますよ。VBA でマウス操作やキーボード操作は 自動化できますけど、API を使った非常に面倒なものです。 UWSC のようなツールを使った方が遙かに簡単です。 http://www.uwsc.info/
お礼
ご回答ありがとうございます。 ”UWSC”というツールは色々できて便利そうですね。 勉強してみます。
補足
こんばんは。 早速、UWSC体験版をダウンロードしてみました。 他アプリケーションをVBAマクロ記録の感覚で記録・再生できる点が良いですね。夢の様なソフトです。 ところでUWSC自体をVBA(外部)から操作することは可能ですか? これが出来れば大抵のことはできそうです。
- nikoniko_009
- ベストアンサー率75% (3/4)
参考までに マウスの操作は予めどの位置にボタンがあるのか把握しないといけないので大変です。 altやenterを操作してボタンを押したほうがいいかも。 Private Declare Function BlockInput Lib "User32.dll" (ByVal fBlock As Long) As Long Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long Private Declare Sub mouse_event Lib "user32" _ (ByVal dwFlags As Long, ByVal dx As Long, _ ByVal dy As Long, ByVal cButtons As Long, _ ByVal dwExtraInfo As Long) Sub auto_seigyo() BlockInput 1 'ブロック開始(キーロック) '----------------------- Call Shell("c:\windows\notepad.exe", 1) 'アプリ起動(メモ帳) Application.Wait (Now() + TimeValue("00:00:01")) '1秒間ウェイト SendKeys ("abc") 'キー入力 Application.Wait (Now() + TimeValue("00:00:01")) '1秒間ウェイト '----------------------- Call SetCursorPos(100, 10) 'マウスカーソルポイント移動 Call mouse_event(&H2, 0, 0, 0, 0) 'マウスの左ボタンを押す Application.Wait (Now() + TimeValue("00:00:01")) '1秒間ウェイト Call mouse_event(&H4, 0, 0, 0, 0) 'マウスの左ボタンを離す '----------------------- Call SetCursorPos(100, 200) 'マウスカーソルポイント移動 Application.Wait (Now() + TimeValue("00:00:01")) '1秒間ウェイト Call mouse_event(&H8, 0, 0, 0, 0) 'マウスの右ボタンを押す Application.Wait (Now() + TimeValue("00:00:01")) '1秒間ウェイト Call mouse_event(&H10, 0, 0, 0, 0) 'マウスの右ボタンを離す '----------------------- BlockInput 0 'ブロック解除(キーロック) End Sub
お礼
ご回答ありがとうございます。 VBAでもマウス操作ができるとは感動です。 私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、 EXCELがアクティブになってしまっている様な気がします。 私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。 例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか? こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。 画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?) マウスポイントの法則がわかりましたら教えてください。 EXCEL内操作ならマウス操作するより、マクロ記録を活用した方が楽そうですね。 1つ選択肢が増えた点では非常に勉強になりました。ありがとうごじます。
お礼
ご回答ありがとうございます。 まだ全容は理解できていませんが、上記ソースプログラムで動作確認しました。 これで無事やりたいことが出来そうです。本当にありがとうございました。