• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マウスイベントが動かない)

マウスイベントが動かない

このQ&Aのポイント
  • マウスイベントが正常に動作しない問題について質問があります。
  • エクセルシートのダブルクリックイベントでマウス左クリックを呼び出していますが、一部のマウスイベントが動作しない現象が発生しています。
  • タイマーの遅延やモジュールにコードを追加するなど、さまざまな試みをしたが解決しません。どこに問題があるか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答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

007itochan
質問者

お礼

ありがとうございます。 クリックイベントの前に少し 時間を入れてやると OKでした。 お世話様でした。感謝

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

SetCursorPos(929, 12) この座標は正しいですか。 古いXP機の1024x800モニターで、該当のWindowが最大化されている状態の時の 「最小化」か「最大化:元に戻す」あたりだと思いますが・・・。 (スクリーン座標とOfficeのピクセル座標の関係はかなり難しいので、メニューだけ表示させるとか最大化しておくとかしないとちょっとしたことでうまく動作させられなくなります。) プログラムは最初の部分以外を標準モジュールに書いてあるみたいなので無関係と思いますが Private Declare Sub mouse_event Lib ・・・・・ これだけprivate宣言してあるのは間違えやすいので他とそろえるようにしたほうがいいです。

007itochan
質問者

お礼

ありがとうございます。 座標軸は間違っていないと思います(で、座標軸取り込む部分も記載しました) 現状、マウスがとんだ状態で、クリックすれば予定通りですので、 で、ぶっちゃけ、いろいろなところからのコピペゆえ Private Declare Sub mouse_event Lib ・・・・・ これだけprivate宣言してあるのは・・・ どう直せばいいでしょ?? 恐縮ですが 置く場所を 間違ったかな?

すると、全ての回答が全文表示されます。

関連するQ&A