投稿

12月, 2020の投稿を表示しています

エクセル VBA マウスカーソルの移動とクリック

Quick Edit Pencil
セルの固定をしていると うまくいかない ので放棄した
#If VBA7 And Win64 Then

    'マウスカーソルの位置を取得するAPI
    Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    
    'マウスイベントを取得するための決まり文句的なもの
    Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    
    Declare PtrSafe 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 _
    )

#Else '32bit用

    'マウスカーソルの位置を取得するAPI
    Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    
    'マウスイベントを取得するための決まり文句的なもの
    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 _
    )

#End If
Sub Sample1()

    Dim p As POINTAPI 'API用変数
    
    GetCursorPos p 'カーソル位置取得
    
    MsgBox "X座標:" & p.x & " Y座標:" & p.y

End Sub

Excel VBA マウスカーソルの位置とセルを連携する | やさしいExcelVBA
Option Explicit

エクセルExcel大事典 VBAマクロ応用講座 スクリーン座標 ポイント ピクセル PointsToScreenPixels
Sub フォームコントロールボタンをクリック()

    Dim ws01 As Worksheet
    Set ws01 = Worksheets("入力")
    Dim btn As Button
    Set btn = ws01.Buttons("情報取得ボタン")
'    btn.Select

  
  Debug.Print Selection.Width * 96 / 72 * (ActiveWindow.Zoom / 100)
  
    ws01.Range("A1").Select
    Dim R1C1Left, R1C1Top As Long
    R1C1Left = ActiveWindow.PointsToScreenPixelsX(Selection.Left)
    R1C1Top = ActiveWindow.PointsToScreenPixelsY(Selection.Top)
    Range("a1") = R1C1Left
    Range("a2") = R1C1Top
    



    Dim x, y  As Long
    x = ((btn.Left * 96 / 72) * (ActiveWindow.Zoom / 100))
    y = ((btn.Top * 96 / 72) * (ActiveWindow.Zoom / 100))

    Debug.Print x
    SetCursorPos y, x
    
    Application.Wait Now + TimeValue("00:00:01")
    
    '左クリックの動作
    mouse_event 2
    mouse_event 4
    
End Sub
Sub フォームコントロールのボタンを捕らえる()


    Dim ws01 As Worksheet
    Set ws01 = Worksheets("入力")

'    ActiveSheet.Shapes("情報取得ボタン").Select
'    Dim btn As Button
'    Set btn = ActiveSheet.Buttons(2)
'    Debug.Print btn.Caption
'''    Dim x, y  As Long
'''    x = ActiveWindow.PointsToScreenPixelsX(ActiveSheet.Shapes("情報取得ボタン").Left * 96 / 72)
'''    y = ActiveWindow.PointsToScreenPixelsY(ActiveSheet.Shapes("情報取得ボタン").Top * 96 / 72)
'''    x = ActiveWindow.PointsToScreenPixelsX(ActiveSheet.Range("B3").Left * 96 / 72)
'''    y = ActiveWindow.PointsToScreenPixelsY(ActiveSheet.Range("B3").Top * 96 / 72)
'''
'''    Debug.Print x
'''    SetCursorPos x, y
    '左クリックの動作
'mouse_event 2
'mouse_event 4

'(実行用 選択中のセル又はオブジェクトの位置)
Dim R1C1Left As Long
Dim R1C1Top As Long
Const DPI As Long = 96
Const PPI As Long = 72
    R1C1Left = ActiveWindow.PointsToScreenPixelsX(0)
    Debug.Print R1C1Left
    R1C1Top = ActiveWindow.PointsToScreenPixelsY(0)
    Debug.Print R1C1Top
    Range("a1") = ((Selection.Left * DPI / PPI) * (ActiveWindow.Zoom / 100)) + R1C1Left
    Range("a2") = ((Selection.Top * DPI / PPI) * (ActiveWindow.Zoom / 100)) + R1C1Top
'(検証用 現在のマウスカーソルの位置)
Dim Pos As POINTAPI
Dim MouseLeft As Long
Dim MouseTop As Long
    GetCursorPos Pos
        MouseLeft = Pos.x
        MouseTop = Pos.y
    Range("a3") = MouseLeft
    Range("a4") = MouseTop
    
    Debug.Print Selection.Height * DPI / PPI * (ActiveWindow.Zoom / 100)
Debug.Print Selection.Width * DPI / PPI * (ActiveWindow.Zoom / 100)
    
End Sub

VBAでマウスを自動操作する方法~自動打鍵を目指して~ – Rainbow Planet

VBA マクロ実行ボタンをクリックする

Quick Edit Pencil
マクロ実行ボタン(フォームコントロール) 
Private Sub フォームコントロールのボタンを捕らえる()

'    ActiveSheet.Shapes ("情報取得ボタン")
    Dim btn As Button
    Set btn = ActiveSheet.Buttons(2)
    Debug.Print btn.Caption
    
End Sub

コマンドボタン(ActiveXコントロール ※古いバージョンのOfficeでは「コントロールツールボックス」)
'Application.Run "'集計.xls'!速報"
'Application.Run "'" & ActiveWorkbook.Path & "\" & ActiveWorkbook.Name & "'!入力.情報取得ボタン"
'Application.Run "'集計.xls'!速報取得"
Application.Run "'集計.xls'!Sheet1.ボタン 1_Click"
'Application.Run "'集計.xls'!情報取得ボタン"

Dim ws01 As Worksheet
Set ws01 = Worksheets("入力")

VBA エクセル スクレイピング準備

Quick Edit Pencil
Microsoft HTML Object Library
Microsoft Internet Controls

が必要

VBEを開いたら、「ツール(T)」→「参照設定(R)」をクリック

VBA 関数に引数を渡す エクセル>ボタン>マクロ登録

Quick Edit Pencil
エクセル>フォームコントロールボタン>マクロ登録
'テスト.xls'!'テスト関数 "引数"'
VBA 関数に引数を渡す



エクセルVBAのボタン設置で引数を渡してマクロを呼び出す方法
Optionalキーワードで引数を省略可能とする
このように引数があったりなかったりする場合は、受け取る側でOptionalキーワードをつけて省略可能な引数であることを明示します。

Subプロシージャをこのように変更します。

Sub showMessage(Optional num As Integer = 1)

MsgBox "ボタン" & num & "が押されました"

End Sub

VBA 一時停止

Quick Edit Pencil
処理を一時停止する方法[エクセルVBA] : バヤシタ

一時停止する
Option Explicit
 
Sub test()
    Debug.Print "処理開始:" & Now
    
    '1秒処理を停止(現在時刻の1秒後まで処理を待つ)
    Application.Wait Now + TimeValue("00:00:01")
    
    Debug.Print "処理終了:" & Now
End Sub
一時停止する(ミリ秒で停止時間を指定)
サンプルコードは次の通りです。「Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)」の記述が無いと動作しません。
Option Explicit
 
'WindowsAPI の使用を宣言
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Sub test()
    Debug.Print "処理開始:" & Now
    
    '500ミリ秒一時停止
    Sleep 500
    
    Debug.Print "処理終了:" & Now
End Sub