• ベストアンサー

EXCEL VBAから他アプリケーションを操作することは可能ですか?

こんばんは。 VBAの本を購入し勉強していますが、VBAと他アプリケーションとの連携について記載が少なく(txtやcsvファイル操作)、どこまで出来るんだろうという不安があり質問しました。 (1)EXCEL VBAから他アプリケーションを起動し、設定操作、命令を送り操作することは可能でしょうか? イメージとしては他アプリに一方的に命令を送り操作できれば良しです。(アプリ側からのリターン要求はしません。) (2)第2の質問です。 VBAで他アプリを起動した状態で人が操作している感覚でマウスを操作できますか?(利用方法:他アプリの●ボタンを押したい!!) 目の前にソフトがあるのに触る操作は出来ないものでしょうか? いろいろ調べて見ましたが、この様な事例はありません。 駄目元ですが、こんな操作を知っていましたら教えてください。 こんな操作ができればいいな~

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.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

miyuka2
質問者

お礼

ご回答ありがとうございます。 まだ全容は理解できていませんが、上記ソースプログラムで動作確認しました。 これで無事やりたいことが出来そうです。本当にありがとうございました。

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> ところでUWSC自体をVBA(外部)から操作することは可能ですか? 具体的にどんなことですか?

miyuka2
質問者

補足

KenKen_SPさん何度もお付き合いいただきありがとうございます。 具体的にはEXCEL2000内の特定のセルに規定値外のデータが入力された場合にUWSCを起動してデジタル出力ボードの アプリケーションソフトを起動して、ビット1のIOを”ON”(警報が出す)という操作をしたいと思っています。 このデジタル出力ボードにはソフトが付随されて来たのですが、ソフトの中身を編集出来そうもありません。 そこでVBAよりマウス操作して操作したいと考えました。

回答No.3

>私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、 >EXCELがアクティブになってしまっている様な気がします。 多分、マウスカーソルの(100, 10)の位置にメモ帳のウィンドウがなかったのが原因だと思います。このように画面のどの位置に何があるか把握しておかないとマウス操作は困難です。 ペイントツールを最大化で起動するようにしておけば、ある程度予測はできます。 >私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。 >例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか? >こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。 私も昔、同じ事を行おうとして探してみましたが参考になりそうなものがなくて、WEBで調べ試行錯誤した結果、あのような形に行き着きました。 >画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を >マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?) >マウスポイントの法則がわかりましたら教えてください。 ディスプレイの表示画面のポイントになります。

miyuka2
質問者

お礼

ご回答ありがとうございます。 アクティブが切り替わってしまう理由は理解できました。 参考書はやはり無い様ですね。 ディスプレイ表示画面のと座標の関係は手探りで法則性を見付けてみます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 > 画面設定などで異なるかも知れませんが法則性があるなら、色々 > 調べるより一度ソフトを操作した手順をマクロに記録すれば良い。 その通りだと思いますよ。VBA でマウス操作やキーボード操作は 自動化できますけど、API を使った非常に面倒なものです。 UWSC のようなツールを使った方が遙かに簡単です。 http://www.uwsc.info/

miyuka2
質問者

お礼

ご回答ありがとうございます。 ”UWSC”というツールは色々できて便利そうですね。 勉強してみます。

miyuka2
質問者

補足

こんばんは。 早速、UWSC体験版をダウンロードしてみました。 他アプリケーションをVBAマクロ記録の感覚で記録・再生できる点が良いですね。夢の様なソフトです。 ところでUWSC自体をVBA(外部)から操作することは可能ですか? これが出来れば大抵のことはできそうです。

回答No.1

参考までに マウスの操作は予めどの位置にボタンがあるのか把握しないといけないので大変です。 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

miyuka2
質問者

お礼

ご回答ありがとうございます。 VBAでもマウス操作ができるとは感動です。 私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、 EXCELがアクティブになってしまっている様な気がします。 私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。 例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか? こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。 画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?) マウスポイントの法則がわかりましたら教えてください。 EXCEL内操作ならマウス操作するより、マクロ記録を活用した方が楽そうですね。 1つ選択肢が増えた点では非常に勉強になりました。ありがとうごじます。

関連するQ&A

  • 他のアプリケーションとの連携

     VBを使って他の既存のソフトなどへ何らかの命令をかけることは可能でしょうか?    具体的には起動中のほかのアプリケーションへキー操作をさせる…というようなことは可能でしょうか?  たとえば、コマンドを設置しておいて、そのコマンドをクリックすると起動中の別のアプリケーション上でEnterキーを押した状態を引き起こさせるというようなことです。    また、それとは逆に他のアプリケーションを監視して、キーが押されたときに反応させるというようなことは可能でしょうか?  API関数等を使用するのでしたらどういう関数を使用すればよいか教えてください。  よろしくお願いします。

  • Access VBA 他アプリケーション

    Accessのフォームから他アプリケーションを起動するボタンをつくります。 起動したアプリケーションの入力フォームへ、Accessのフォームのテキストボックスの内容を書き込む事はできないでしょうか? 例えば、Accessのフォームに『OKWave』と入力されたテキストボックスと、ブラウザが開くボタンが配置されているとします。ボタンをクリックするとブラウザが起動し、起動したら任意の検索サイトが表示され、そのサイトのフォームに、Accessのフォームのテキストボックスにかかれている、『OKWave』が自動的に入力するようなVBAを書きたいと思います。 よろしくお願いします。

  • 別のアプリケーションとエクセルマクロについて

    エクセルとは別のアプリケーションのデータの文字をコピーして エクセルのシートのある決まった位置に張り付ける、ということを 簡単に行いたいのですが、(マクロ的にボタン一つとか) どういった方法がありますか? エクセルのVBAマクロは作っていますが、 別のアプリからデータをコピーして持ってくるというのは、できないですよね。 (csvとかに落とすこともできないデータです。) 別のアプリの文字をコピーする段階で、VBAでは無理だと思うので、 他のプログラム言語だと、そういうことができますか? C言語は少し習いましたが、何か最適な方法や、 このプログラム言語だと、簡単にできるというのがあれば、教えてください。 よろしくお願いいたします。

  • アプリケーション()の応答がないため、操作を完了で

    たまにですがアクセスvbaを実行中に 画像のような画面が出て、どうすることもできなくなるのですが どういう意味のエラー何でしょうか? 「アプリケーション()の応答がないため、操作を完了できません。 問題を解決するには、切り替えを選択して を起動してください。」 と書いてあります。 切り替えを押しても再試行を押しても何も変化ありません。 そもそも アプリケーション() とは、何を指しているのでしょうか? あと、「 を起動」となってますが、何を起動すればいいのでしょうか? 結局タスクマネージャーから 強制終了しています。

  • VBAでエクセル内の情報を他のアプリケーションへ自動入力したいです

    業務効率を上げるために、VBAでエクセル内の情報を他のアプリケーションに自動入力させたいです。 入力する情報は、複数の項目があり、固定されています。 できれば、ワンクリックですべての入力フォームに自動入力させたいです。 これらのことは、VBAで実現可能なのでしょうか? また、実現可能な場合、どのようにすればよろしいのでしょうか? VBAを始めたばかりで何が出来て何が出来ないか、あまりわかっておりません。 VBAを習熟している方にとっては、簡単に質問であるかも知れませんが、どうぞご教授ください。 よろしくお願いいたします。

  • 「他のユーザーまたは他のアプリケーションが・・」

    iX500を使っています。昨日まで調子よく動いていましたが、突然エラーメッセージが出て動かなくなりました。PCの再起動、iX500の再起動を何回か試してみても同様です。エラーメッセージの内容は「ScanSnapを使用することができませんでした。他のユーザーまたは他のアプリケーションがScanSnapを使用していないことを確認してから再度操作してください」というものです。PCはwin10。アプリケーションは楽々ライブラリを使っています。 ※OKWAVEより補足:「「ScanSnap/fiシリーズ/HHKB」商品について」についての質問です。

  • アプリケーションがひらかない。

    アプリケーションがひらけなくなって困っています 開けないのは、エクセルなんですが、クリックしてファイルを開こうとすると wiondowsインストーラが起動され、CD-ROMを要求され、最後には、エラーがでます。 *「指定されたファイルに対し、この操作を行なうアプリケーションが関連付けられていません。[フォルダオプション]コントロールパネルでアプリケーションを関連付けてください* と表示されます。最近まで普通に動いていたのですが、あるとき突然こうなってしまいました。どう対処すればいいでしょうか・・・。ちなみに、他のアプリケーションは開きます。 win2000を使用

  • C#からVBA起動

    C#のアプリからエクセルVBAのアプリを起動します。 VBAのアプリが起動中はC#のフォームを裏にして操作できないように 制御したいのですが可能でしょうか???

  • Excel VBA 特定のWindowを前面に

    VBAのShellコマンドでコンソールアプリケーションを起動し,その処理が終了してから(終了を待つのはWD.Tasks.Existsを使いました)そのアプリケーションで作成したcsvファイルを開いて処理するプログラムを作りました。 そのアプリケーションは,動いている間,Excelの背面にあるようで画面に表示されません。このアプリケーションが動いている間,それを最前面に表示させたいのですが,方法がありましたらお教えください。

  • エクセルVBAで、バッチ処理を起動すると・・・

    Windows/XP/pro、エクセル2002 使用です。 c:\autocsvフォルダーに、MS-DOSコマンドを使ってFTPを自動実行しサーバーからCSVを自動的に取得する.TXTファイルと、バッチファイルの.batファイルをおいています。 参考URL http://www.ponko2.com/ftp_bat.html この.batファイルをVBAから呼び出して実行させるように下記のコードを記述ましたが、ファイルは起動するものの、CSVファイルを取得(またはLogin)できません。Openメソッドを使ってもうまくいきませんでした。実行する関数の間違いと思っていますが、それとも、VBAからバッチファイルを実行する場合の何か決まりごと等があるのでしょうか? Sub test() Dim str As Variant str = Shell("c:\autocsv\auto.bat", vbNormalFocus) Application.Wait Now + TimeValue("00:00:10") End Sub (VBAの実行をステップインを使って1行ずつ実行してもファイルを取得できません) なお、.batファイルを単独で起動させた場合は、問題なくcsvファイルの取得はできています。 お手数ですが、ご指導いただけますようお願いします。