アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは。

VBAの本を購入し勉強していますが、VBAと他アプリケーションとの連携について記載が少なく(txtやcsvファイル操作)、どこまで出来るんだろうという不安があり質問しました。

(1)EXCEL VBAから他アプリケーションを起動し、設定操作、命令を送り操作することは可能でしょうか?
イメージとしては他アプリに一方的に命令を送り操作できれば良しです。(アプリ側からのリターン要求はしません。)

(2)第2の質問です。
VBAで他アプリを起動した状態で人が操作している感覚でマウスを操作できますか?(利用方法:他アプリの●ボタンを押したい!!)
目の前にソフトがあるのに触る操作は出来ないものでしょうか?
いろいろ調べて見ましたが、この様な事例はありません。
駄目元ですが、こんな操作を知っていましたら教えてください。
こんな操作ができればいいな~

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/04 20:38

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


具体的にどんなことですか?

この回答への補足

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

このデジタル出力ボードにはソフトが付随されて来たのですが、ソフトの中身を編集出来そうもありません。
そこでVBAよりマウス操作して操作したいと考えました。

補足日時:2008/08/03 22:47
    • good
    • 1

>私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、


>EXCELがアクティブになってしまっている様な気がします。
多分、マウスカーソルの(100, 10)の位置にメモ帳のウィンドウがなかったのが原因だと思います。このように画面のどの位置に何があるか把握しておかないとマウス操作は困難です。
ペイントツールを最大化で起動するようにしておけば、ある程度予測はできます。

>私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。
>例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか?
>こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。
私も昔、同じ事を行おうとして探してみましたが参考になりそうなものがなくて、WEBで調べ試行錯誤した結果、あのような形に行き着きました。

>画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を
>マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?)
>マウスポイントの法則がわかりましたら教えてください。
ディスプレイの表示画面のポイントになります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/08/03 18:35

こんにちは。



> 画面設定などで異なるかも知れませんが法則性があるなら、色々
> 調べるより一度ソフトを操作した手順をマクロに記録すれば良い。

その通りだと思いますよ。VBA でマウス操作やキーボード操作は
自動化できますけど、API を使った非常に面倒なものです。
UWSC のようなツールを使った方が遙かに簡単です。

http://www.uwsc.info/

この回答への補足

こんばんは。
早速、UWSC体験版をダウンロードしてみました。
他アプリケーションをVBAマクロ記録の感覚で記録・再生できる点が良いですね。夢の様なソフトです。

ところでUWSC自体をVBA(外部)から操作することは可能ですか?
これが出来れば大抵のことはできそうです。

補足日時:2008/08/03 20:40
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/08/03 18:23

参考までに


マウスの操作は予めどの位置にボタンがあるのか把握しないといけないので大変です。
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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
VBAでもマウス操作ができるとは感動です。

私の気のせいかもしれませんが、Call SetCursorPos(100, 10) 'マウス操作になった時点で、
EXCELがアクティブになってしまっている様な気がします。
私がマウスで操作したいのは、他ソフトを人間が操作している感覚で押しボタンを押したり、設定変更したいためです。
例えばペイントを起動して画面に○を作図(マウス操作)し保存、これをexcel内に取込むマクロはどう考えれば良いですか?
こういう方法はどういう本に記載されていますか?本を紹介していただければ勉強してみたいと思います。

画面設定などで異なるかも知れませんが法則性があるなら、色々調べるより一度ソフトを操作した手順を
マクロに記録すれば良い。(フルスクリーンサイズ:縦○x横○、○は長さ△mm相当等の法則性はありませんか?)
マウスポイントの法則がわかりましたら教えてください。

EXCEL内操作ならマウス操作するより、マクロ記録を活用した方が楽そうですね。
1つ選択肢が増えた点では非常に勉強になりました。ありがとうごじます。

お礼日時:2008/08/03 09:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A