VBAでマウスを操作する方法、座標の確認方法
仕事でマウスを自動化し、業務改善をしましたので、
それをまとめてみました。
思った以上に簡単なので、是非使ってみていただいたらと思います。
マウス操作のおまじないを使って左クリックを行う。
マウスの自動化は、元々用意されている
「マウス操作のおまじない」をプログラム上部に書き込み、
そのおまじないを用いてマウス操作を自動化していきます。
さっそく、プログラムを見ていきましょう。(ダブルクリックでコピーできます)
'↓↓↓↓マウス操作のおまじない開始↓↓↓↓
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回とってくるようになっています。
(ダブルクリックでコピーできます)
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) で、座標を読み込み、セルに書き出しています。
この作業をまずおこない、各々のパソコンの画面に校正し、
下記の通り他のプログラムで、座標を読み込んであげることで、
どのパソコンでも同じ作業を覚えこますことができます。
SetCursorPos Worksheets("座標校正").Cells(2, 3).Value, Worksheets("座標校正").Cells(2, 4).Value
まとめ
マウスクリックは正直禁断の使い方ではありますが、
旧態依然としたシステムなどを扱っているものに関しては、
非常に有効な対策となります。
また、おじさんでも、やっていることがわかりやすい点から、
拒否反応なく、導入してもらうことができます。
是非使ってみてください。
コメント欄