
エクセルシートのダブルクリック イベントで
Call マウス左クリック
とします。
ret = SetCursorPos(929, 12) カーソル移動と
SendKeys " 12345"
は動くのですが
mouse_event 2, 0, 0, 0, 0 '左ダウン
mouse_event 4, 0, 0, 0, 0 '左アップ
この二つが 動いてくれません。
遅延させるタイマー入れたり、するのですが同じです。
MODULE の中に入れたり、シートの中に入れても 同じです。
どこが、問題なのでしょうか
よろしくどうぞ
Sub タイミング()
stime = gettickcount
Do While gettickcount - stime < 1000
DoEvents
Loop
Sub マウス左クリック()
ret = SetCursorPos(929, 12)
mouse_event 2, 0, 0, 0, 0 '左ダウン
mouse_event 4, 0, 0, 0, 0 '左アップ
ret = SetCursorPos(309, 282)
SendKeys " 12345"
ret = SetCursorPos(309, 320)
SendKeys " 12345"
SendKeys " {ENTER}"
SendKeys " %(RY)", True
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Type POINTAPI
X As Long
Y As Long
End Type ’位置取得
'------------------------------------------------------------------
Private Declare Sub mouse_event Lib "user32" _
(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As _
Long, ByValcButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Function SetCursorPos Lib "user32" _
(ByVal X As Long, ByVal Y As Long) As Long
No.2ベストアンサー
- 回答日時:
すべてを標準モジュールに書いてみました。
実行開始はシート1に置いた「角丸四角形」にマクロの登録をして、これをクリックします。
Option Explicit
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Type POINTAPI
X As Long
Y As Long
End Type '位置取得
'------------------------------------------------------------------
Private Declare Sub mouse_event Lib "user32" _
(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As _
Long, ByValcButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Function SetCursorPos Lib "user32" _
(ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub 角丸四角形1_Click()
Call タイミング
Call マウス左クリック
End Sub
Sub タイミング()
'ここはわずらわしいのでSleepに変えました。
'Dim stime As Long
'stime = GetTickCount
'Do While GetTickCount - stime < 1000
'DoEvents
'Loop
Sleep 1000
End Sub
Sub マウス左クリック()
Dim ret As Long
ret = SetCursorPos(929, 12)
mouse_event 2, 0, 0, 0, 0 '左ダウン
mouse_event 4, 0, 0, 0, 0 '左アップ
'ret = SetCursorPos(309, 282)
Sleep 500
SendKeys " 12345"
ret = SetCursorPos(309, 320)
SendKeys " 12345"
SendKeys " {ENTER}"
SendKeys " %(RY)", True
DoEvents: DoEvents: DoEvents
End Sub
これでペイントの右上のボタンをクリックさせ
セルに12345を2回表示させました。
2010版のせいかSendKeys " %(RY)", Trueは校閲らしいのですがYがわかりませんでした。
Excelのどの版でも正常に動作すると思いますので、理解を進めてください。
なおシートのセルをダブルクリックして開始させる場合は
上記の角丸四角形・・のところを変えます。
(あるいはそのまま残しておけばどちらからでも実行できます。)
Worksheet_BeforeDoubleClickイベントを使い下記のようにします。
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call タイミング
Call マウス左クリック
End Sub
No.1
- 回答日時:
SetCursorPos(929, 12)
この座標は正しいですか。
古いXP機の1024x800モニターで、該当のWindowが最大化されている状態の時の
「最小化」か「最大化:元に戻す」あたりだと思いますが・・・。
(スクリーン座標とOfficeのピクセル座標の関係はかなり難しいので、メニューだけ表示させるとか最大化しておくとかしないとちょっとしたことでうまく動作させられなくなります。)
プログラムは最初の部分以外を標準モジュールに書いてあるみたいなので無関係と思いますが
Private Declare Sub mouse_event Lib ・・・・・
これだけprivate宣言してあるのは間違えやすいので他とそろえるようにしたほうがいいです。
ありがとうございます。
座標軸は間違っていないと思います(で、座標軸取り込む部分も記載しました)
現状、マウスがとんだ状態で、クリックすれば予定通りですので、
で、ぶっちゃけ、いろいろなところからのコピペゆえ
Private Declare Sub mouse_event Lib ・・・・・
これだけprivate宣言してあるのは・・・
どう直せばいいでしょ?? 恐縮ですが
置く場所を 間違ったかな?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) 【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法 4 2022/12/08 20:53
- Excel(エクセル) excel vba 参照渡しと値渡し 2 2022/04/27 10:45
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
このQ&Aを見た人はこんなQ&Aも見ています
-
マウスのクリックを自動で
C言語・C++・C#
-
VBAでのカーソル移動とマウスクリック
Access(アクセス)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
エクセルVBAで画面の大きさを取得する方法!
Excel(エクセル)
-
5
Excel2003のVBAで、セルの幅・高さをピクセル単位で取得するには?
Excel(エクセル)
-
6
Excel VBA によるマウス操作
Visual Basic(VBA)
-
7
Excel VBAでマウスの左クリックのイベントを検知するには
Visual Basic(VBA)
-
8
MoveWindowで位置だけ変更するには?
Visual Basic(VBA)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない
Excel(エクセル)
-
11
別インスタンスのエクセルを制御したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マウス位置の色を得る
-
画像中のある座標でマウスオー...
-
C言語でグラフ作成??
-
UWSCのプログラミングついて教...
-
Excel VBAで他アプリケーション...
-
特定座標のRGB値取得について
-
マウスイベントが動かない
-
C#で、画像の、指定した座標の...
-
Unityでピクセル情報を取得する...
-
UWSC画像認識で座標の位置がず...
-
VBでクリックイベントを発生さ...
-
uwscについて、同一の画像(仮...
-
バナーにリンクを埋め込む方法
-
グラフィックメソッドについて
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
Excelシート上のマクロを登録し...
-
VBA エンターキーでイベントに...
-
switch の範囲指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで他アプリケーション...
-
エクセルVBAで画像を貼り付ける...
-
VBでクリックイベントを発生さ...
-
C#で、画像の、指定した座標の...
-
外付ディスプレイで AutoHotkey...
-
UWSCのプログラミングついて教...
-
VBA HTML要素または文字の座標...
-
UWSC画像認識で座標の位置がず...
-
C言語でグラフ作成??
-
コントロール名とそのプロパテ...
-
マウスイベントが動かない
-
UWSCで特定の文字をクリックす...
-
uwscについて、同一の画像(仮...
-
NoxPlayerとUWSCのadbの座標に...
-
VBでプリンター制御コードを記...
-
BASICで3Dポリゴンの描画
-
UWSCでPEEKCOLORを使い指定ウィ...
-
VBでデスクトップ上のアイコン...
-
エクセル マクロ オブジェク...
-
UWSファイルの編集?
おすすめ情報