
こんばんは。
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で質問しましょう!
似たような質問が見つかりました
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- その他(ブラウザ) Excel VBA seleniumのedge操作について 業務上、分からないことがございまして、先 1 2022/06/20 16:59
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- アプリ Edgeを操作するアプリについて 4 2023/05/11 22:48
- Visual Basic(VBA) PowerPoint VBA で画像の鮮明度を変更する方法がわかりません 2 2023/03/24 13:34
- テレビ SwitchBot HUBmini テレビの操作 1 2023/02/26 21:37
- Windows 10 【パソコン カラーフィルターができない 】 パソコンは、富士通。Windows10を使っています ネ 1 2022/04/10 10:38
- 電子レンジ・オーブン・トースター 電子レンジの非科学的(カルト的)動作の原因について考えられる理由を知りたい 8 2022/11/29 14:47
- Excel(エクセル) エクセルVBA 任意のセルの選択時、指定のセルの値を表示 1 2023/04/21 08:13
- 会計ソフト・業務用ソフト 会計ソフトを探してます。 4 2022/08/17 08:35
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
vbaから他のアプリを終了
Visual Basic(VBA)
-
起動中のアプリ、ソフトの取得
Visual Basic(VBA)
-
-
4
エクセルのマクロで他のシステムを動かせますか?
その他(ソフトウェア)
-
5
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
6
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
VBAで他のプログラムが起動しているか調べる方法
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
キー操作 (WSH:コピー&ペー...
-
アウトルックが起動しているか...
-
MSDOS(バッチファイル)でプロセ...
-
Process.Startで起動したアプリ...
-
コマンドボタンをクリックする...
-
Eclipseでjavascriptが動かない
-
二重起動禁止にする理由とは
-
exeファイルを実行するとすぐに...
-
VBAでSeleniumからChromeを起動...
-
C# 他のアプリケーションを優先...
-
別アプリ終了させる
-
対象のアプリケーションが終了...
-
VB6.0からエクセルを起動
-
VBS 入力可能状態を判別できま...
-
Excelが起動しているかを通知す...
-
VisualBasic2005 外部アプリを...
-
「FindWindow」、ウィンドウハ...
-
別のクラスからのタイマの起動方法
-
ミリ秒を○時間○分○秒にしたい
-
EXCEL VBAから他アプリケーショ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでOutlookを終了させたい Ex...
-
VBSから別のVBS起動するとき変...
-
アウトルックが起動しているか...
-
Process.Startで起動したアプリ...
-
VBで実行中のEXEファイルの情報...
-
EXCEL VBAから他アプリケーショ...
-
Windows上のプログラム。「予め...
-
VBSで起動したアプリが前面表示...
-
VBAでSeleniumからChromeを起動...
-
exeファイルを実行するとすぐに...
-
VB6で呼び出し元の情報を取得す...
-
フォームの最前面が効かない
-
AppActivateについて
-
宛先ナシでメールソフトを起動...
-
64bitで作ったEXEを32bitで起動...
-
C# 他のアプリケーションを優先...
-
MSペイントを画像ファイル名を...
-
ウィンドウを終了させたい・・・
-
C#のフォームから起動するブラ...
-
Menuのショートカットの処理が...
おすすめ情報