VBAでマウスを操作する方法、座標の確認方法
仕事でマウスを自動化し、業務改善をしましたので、
それをまとめてみました。
思った以上に簡単なので、是非使ってみていただいたらと思います。
マウス操作のおまじないを使って左クリックを行う。
マウスの自動化は、元々用意されている
「マウス操作のおまじない」をプログラム上部に書き込み、
そのおまじないを用いてマウス操作を自動化していきます。
さっそく、プログラムを見ていきましょう。(ダブルクリックでコピーできます)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | '↓↓↓↓マウス操作のおまじない開始↓↓↓↓ Private Type Position x As Long y As Long End Type 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 , _ Optional ByVal dx As Long = 0, _ Optional ByVal dy As Long = 0, _ Optional ByVal dwDate As Long = 0, _ Optional ByVal dwExtraInfo As Long = 0) Declare Function GetCursorPos Lib "user32" _ (lpPoint As Position) As Long Declare Sub Sleep Lib "kernel32" ( ByVal dwMilliseconds As Long ) 'mouse_event用の定数宣言 Private Const MOUSEEVENTF_ABSOLUTE = &H8000 Private Const MOUSEEVENTF_MOVE = &H1 Private Const MOUSEEVENTF_LEFTDOWN = &H2 Private Const MOUSEEVENTF_LEFTUP = &H4 Private Const MOUSEEVENTF_RIGHTDOWN = &H8 Private Const MOUSEEVENTF_RIGHTUP = &H10 Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 Private Const MOUSEEVENTF_MIDDLEUP = &H40 'Public Class Form1 Public Declare Sub keybd_event Lib "user32" ( ByVal bVk As Byte , ByVal bScan As Byte , ByVal dwFlags As Integer , ByVal dwExtraInfo As Integer ) '↑↑↑↑マウス操作のおまじない終了↑↑↑↑ '↓↓↓↓ここからメインプログラム↓↓↓↓ Sub マウスクリック() SetCursorPos 900, 140 '左から900ピクセル、上から140ピクセルの位置にカーソルを移動 Sleep 200 mouse_event MOUSEEVENTF_LEFTDOWN '左ボタン押下(範囲選択のクリックのつもり) mouse_event MOUSEEVENTF_LEFTUP '左ボタン解放 End Sub |
上記プログラムで実際に動作をしているのは、
↓ここからメインプログラム となっており、
・カーソルを移動 SetCursorPos 900, 140
・少し待って、Sleep 200
・左クリックを押し mouse_event MOUSEEVENTF_LEFTDOWN
・左クリックを話す mouse_event MOUSEEVENTF_LEFTUP
となっております。
同様におまじないを使うことで、
下記の通りマウスを操作することができます。
コード | ボタン | 動作 |
SetCursorPos x, y | x,y座標に移動 | |
mouse_event MOUSEEVENTF_LEFTDOWN | 左クリック | 押す |
mouse_eventMOUSEEVENTF_LEFTUP | 左クリック | 離す |
mouse_eventMOUSEEVENTF_RIGHTDOWN | 右クリック | 押す |
mouse_eventMOUSEEVENTF_RIGHTUP | 右クリック | 離す |
mouse_eventMOUSEEVENTF_MIDDLEDOWN | 中クリック | 押す |
mouse_eventMOUSEEVENTF_MIDDLEUP | 中クリック | 離す |
マウスの座標を確認
案外簡単にマウスの操作をできることが分かったと思いますが、
ここで躓くのが、マウスの座標を確認する方法です。
特に、人によってパソコンの画面サイズが違うと、
自分のパソコンではうまくいったのに、他の人のパソコンでは動作しない可能性があります。
その問題を解決するのが下記プログラムとなります。
マウスを左クリックした地点の座標を順番に5回とってくるようになっています。
(ダブルクリックでコピーできます)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Sub 座標校正() Dim sht As Worksheet Sleep 500 Const CN = 5 Dim pos As Position i = 0 Dim currentClickNum As Long Do While i < CN If GetAsyncKeyState(1) < 0 Then i = i + 1 Call GetCursorPos(pos) Cells(i + 2, 3) = pos.x Cells(i + 2, 4) = pos.y Sleep 500 End If Loop End Sub |
上位のプログラムでは、
・Do While i < max で、指定のクリック数までプログラムを繰り返し、
・GetAsyncKeyState(1)<0 で、マウスが押されたのを判断し、
・Call GetCursorPos(pos) で、座標を読み込み、セルに書き出しています。
この作業をまずおこない、各々のパソコンの画面に校正し、
下記の通り他のプログラムで、座標を読み込んであげることで、
どのパソコンでも同じ作業を覚えこますことができます。
1 | SetCursorPos Worksheets( "座標校正" ).Cells(2, 3).Value, Worksheets( "座標校正" ).Cells(2, 4).Value |
まとめ
マウスクリックは正直禁断の使い方ではありますが、
旧態依然としたシステムなどを扱っているものに関しては、
非常に有効な対策となります。
また、おじさんでも、やっていることがわかりやすい点から、
拒否反応なく、導入してもらうことができます。
是非使ってみてください。
コメント欄