こんばんは。
VBAの本を購入し勉強していますが、VBAと他アプリケーションとの連携について記載が少なく(txtやcsvファイル操作)、どこまで出来るんだろうという不安があり質問しました。
(1)EXCEL VBAから他アプリケーションを起動し、設定操作、命令を送り操作することは可能でしょうか?
イメージとしては他アプリに一方的に命令を送り操作できれば良しです。(アプリ側からのリターン要求はしません。)
(2)第2の質問です。
VBAで他アプリを起動した状態で人が操作している感覚でマウスを操作できますか?(利用方法:他アプリの●ボタンを押したい!!)
目の前にソフトがあるのに触る操作は出来ないものでしょうか?
いろいろ調べて見ましたが、この様な事例はありません。
駄目元ですが、こんな操作を知っていましたら教えてください。
こんな操作ができればいいな~
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
ご回答ありがとうございます。
まだ全容は理解できていませんが、上記ソースプログラムで動作確認しました。
これで無事やりたいことが出来そうです。本当にありがとうございました。
No.4
- 回答日時:
> ところでUWSC自体をVBA(外部)から操作することは可能ですか?
具体的にどんなことですか?
この回答への補足
KenKen_SPさん何度もお付き合いいただきありがとうございます。
具体的にはEXCEL2000内の特定のセルに規定値外のデータが入力された場合にUWSCを起動してデジタル出力ボードの
アプリケーションソフトを起動して、ビット1のIOを”ON”(警報が出す)という操作をしたいと思っています。
このデジタル出力ボードにはソフトが付随されて来たのですが、ソフトの中身を編集出来そうもありません。
そこでVBAよりマウス操作して操作したいと考えました。
No.3
- 回答日時:
>私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、
>EXCELがアクティブになってしまっている様な気がします。
多分、マウスカーソルの(100, 10)の位置にメモ帳のウィンドウがなかったのが原因だと思います。このように画面のどの位置に何があるか把握しておかないとマウス操作は困難です。
ペイントツールを最大化で起動するようにしておけば、ある程度予測はできます。
>私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。
>例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか?
>こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。
私も昔、同じ事を行おうとして探してみましたが参考になりそうなものがなくて、WEBで調べ試行錯誤した結果、あのような形に行き着きました。
>画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を
>マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?)
>マウスポイントの法則がわかりましたら教えてください。
ディスプレイの表示画面のポイントになります。
ご回答ありがとうございます。
アクティブが切り替わってしまう理由は理解できました。
参考書はやはり無い様ですね。
ディスプレイ表示画面のと座標の関係は手探りで法則性を見付けてみます。
No.2
- 回答日時:
こんにちは。
> 画面設定などで異なるかも知れませんが法則性があるなら、色々
> 調べるより一度ソフトを操作した手順をマクロに記録すれば良い。
その通りだと思いますよ。VBA でマウス操作やキーボード操作は
自動化できますけど、API を使った非常に面倒なものです。
UWSC のようなツールを使った方が遙かに簡単です。
http://www.uwsc.info/
この回答への補足
こんばんは。
早速、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
ご回答ありがとうございます。
VBAでもマウス操作ができるとは感動です。
私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、
EXCELがアクティブになってしまっている様な気がします。
私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。
例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか?
こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。
画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を
マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?)
マウスポイントの法則がわかりましたら教えてください。
EXCEL内操作ならマウス操作するより、マクロ記録を活用した方が楽そうですね。
1つ選択肢が増えた点では非常に勉強になりました。ありがとうごじます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
vbaから他のアプリを終了
Visual Basic(VBA)
-
エクセルのマクロで他のシステムを動かせますか?
その他(ソフトウェア)
-
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
-
4
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
5
VBAでエクセル内の情報を他のアプリケーションへ自動入力したいです
Visual Basic(VBA)
-
6
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
7
EXCEL VBA 他のアプリケーションからの自動貼り付け
Visual Basic(VBA)
-
8
Excel VBA で外部アプリケーションのコンテキストメニューを操作したい
その他(プログラミング・Web制作)
-
9
Excel VBAで他アプリへのテキストデータ貼り付け
Excel(エクセル)
-
10
起動中のアプリ、ソフトの取得
Visual Basic(VBA)
-
11
他アプリの操作(メニューバー)
Visual Basic(VBA)
-
12
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
13
ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法
Visual Basic(VBA)
-
14
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
15
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
16
ExcelVBAでスペースキー操作したい
Excel(エクセル)
-
17
親ウインドウにあるOKボタンを押す方法
Visual Basic(VBA)
-
18
Excel VBAから他のアプリケーションにフォーカスを移したい
Access(アクセス)
-
19
VBAでの一時停止と再開の方法
その他(プログラミング・Web制作)
-
20
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アウトルックが起動しているか...
-
Windows上のプログラム。「予め...
-
VB6で呼び出し元の情報を取得す...
-
VBによる複数バージョンのEXCEL...
-
Process.Startで起動したアプリ...
-
VBSから別のVBS起動するとき変...
-
コマンドボタンをクリックする...
-
Excelが起動しているかを通知す...
-
VBAでSeleniumからChromeを起動...
-
Javaの起動について(他にやる...
-
VBSで起動したアプリが前面表示...
-
分かる人は簡単なのだろうが、v...
-
Internet ExplorerをC言語プロ...
-
VBSでExcelのUserFormをエクス...
-
キー操作 (WSH:コピー&ペー...
-
EXCEL VBAから他アプリケーショ...
-
JavaScriptで作られているHPに...
-
実行ファイルへのドラッグ&ド...
-
VBAでOutlookを終了させたい Ex...
-
別アプリの起動、終了について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでOutlookを終了させたい Ex...
-
Windows上のプログラム。「予め...
-
アウトルックが起動しているか...
-
VBSで起動したアプリが前面表示...
-
VBSから別のVBS起動するとき変...
-
EXCEL VBAから他アプリケーショ...
-
Process.Startで起動したアプリ...
-
VBで実行中のEXEファイルの情報...
-
エクセル起動時別プロセスで開く
-
VBAでSeleniumからChromeを起動...
-
ACCESS VBAで別のACCESS(mdb)を...
-
二重起動禁止にする理由とは
-
VBAでIEが起動しているか...
-
64bitで作ったEXEを32bitで起動...
-
Internet ExplorerをC言語プロ...
-
別アプリの起動、終了について
-
フォームの最前面が効かない
-
exeファイルを実行するとすぐに...
-
VB6で呼び出し元の情報を取得す...
-
ウィンドウを終了させたい・・・
おすすめ情報