dポイントプレゼントキャンペーン実施中!

業務上の単純作業の自動化のため、VBAから他のアプリケーションを操作することが目的です。

以前、ブラウザ上での作業の時に使用した、下記2つのAPIでは今回はマウスカーソルが指定した座標に動いてくれません、、、

Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long
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)

この2つのAPI以外で、カーソル移動とマウスクリックを実現する方法は何かありますでしょうか?

色々な方法を教えていただけるとVBAの勉強にもなり幸いです。



' // 標準モジュール

Option Explicit

Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long
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)
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Sub クリックテスト()

Call SetCursorPos(216, 421)
Sleep 400
Call mouse_event(&H2, 0, 0, 0, 0)
Call mouse_event(&H4, 0, 0, 0, 0)

End Sub

A 回答 (3件)

こんにちは。



> 業務上の単純作業の自動化

とのことですが対象のアプリケーションがもし Component Object Model のインターフェイスを提供しているのであれば、そのインターフェイス (COM オブジェクト) を利用して目的を達成させるアプローチの方が望ましい場合があります。

例: マイクロソフト社製品は COM オブジェクトを提供しています。VBA からも COM オブジェクトにアクセス出来ます。

対象のアプリケーションがそのようなインターフェイスを提供していない場合は、質問にあるように自前で Win32 API を使用するのも手です。あるいは回答にあるようにそれらを代行するソフトウェアの起動を指示して処理そのものはそちらに委託するか。

私は後者がよいと考えます。というのは UWSC が具備している組み込み手続きが沢山の UWSC ユーザのフィードバックを受けて洗練されているからです。これらを使わない手はありません。ぜひ業務の生産性向上に役立ててほしいと思います。

参考URL:http://www.uwsc.info/
    • good
    • 0

こんにちは。



そのコードは、ご本人が書いたものか、他の方が書いたものかは分かりませんが、あまり、他のアプリケーションをVBAから動かすことと考えるのは辞めたほうがよいです。同じOffice でも、うまく行かないこともありますから。

>カーソル移動とマウスクリックを実現する方法は何かありますでしょうか?

この前、ここで質問がでていたのですが、

http://www.uwsc.info/
ここのUWSC で、記録を取って動かしみたらいかがですか?

たぶん、細かく聞いても、VBAの範囲内では、どうしようもないかもしれません。
    • good
    • 0

今回は何をやりたいのか、質問の文章にはっきり書くべきです。


前回のコードも何をやっているのか書かず、コードだけ書いて、あとは読者、回答者で解析し、わからないものは判らなくてもよいという風な書き方になっているが、改めてほしい。
APIはそれほどなじみのあるものではない。
読者数万人が、1読するために貴重な時間を費やすのだから。
>VBAから他のアプリケーションを操作することが目的です。
も抽象的。
    • good
    • 0

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