Excel VBA で、ユーザーフォームをクリックしたときのポインタのクライアント座標を取得し、フォーム上のラベルに表示するというスクリプトを作ろうと思っています。
ウェブで探し当てたVBのソースなどを参考にして、スクリーン座標を取得するところまではうまくいきましたが、「ScreenToClient」関数の書式がVB のソースと同じでは動かないようで、「コンパイルエラー:メソッドまたはデータメンバがみつかりません」というエラー表示が出て止まってしまいます(「Me」を「UserForm1」に代えても結果は同じでした)。
以下は実際のVBAソースです。どのようにすれば動くようになるのか、ご教示頂けませんでしょうか。宜しくお願いします。
'カーソルの位置座標をスクリーン座標で取得するAPI関数
Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINT) As Long
'カーソルの位置座標をスクリーン座標からクライアント座標へ変換するAPI関数
Private Declare Function ScreenToClient Lib "user32" _
(ByVal hWnd As Long, lpPoint As POINT) As Long
'カーソルの位置座標用変数
Private CuP As POINT
'位置座標を受け取る構造体
Private Type POINT
x As Long
y As Long
End Type
Private Sub UserForm_Click()
'スクリーン座標を取得
GetCursorPos CuP
Label1.Caption = "クリック位置のスクリーン座標 X=" & CuP.x & " Y=" & CuP.y
'↑ここまではうまく動いています
'クライアント座標に変換
ret = ScreenToClient(Me.hWnd, CuP)
Label2.Caption = "クリック位置のクライアント座標 X=" & CuP.x & " Y=" & CuP.y
End Sub
No.1ベストアンサー
- 回答日時:
UserFormにはhWndプロパティはありません
ウィンドウハンドルを独自に取得しなければいけません
FindWindowで探すことにより ScreenToClientを使用出来ます
Private Declare Function FindWindow Lib "user32" alias "FindWindowA" _
(ByVal sClass as String, ByVal sTitle as String) as Long
とAPIを定義して
Dim hWndForm as Long
' ユーザーフォームのCaptionをsTitleに渡す
hWNdForm = FindWindow( vbNullString, "UserForm1" )
ret = ScreenToCLient( hWndForm, CuP )
といった具合にします
ご回答有難うございます!
そういうことだったんですね。思っていた通りの動きをしてくれました!
本当に助かりました。有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- 物理学 角運動量の式変形が分かりません。 4 2022/08/03 21:04
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- その他(プログラミング・Web制作) pythonでのカーソル移動がずれる 2 2023/07/30 08:51
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
エクセル vba クリック~離した位置へ直線の挿入
Visual Basic(VBA)
-
エクセルシート上のマウスポインタ座標の取得
Excel(エクセル)
-
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
-
4
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
5
ダブルクリックしたセルの近くにユーザーフォームを表示したい
Excel(エクセル)
-
6
VBAでコントロールのハンドルを取得したい
Visual Basic(VBA)
-
7
VBの「As String * 128」とは?
Visual Basic(VBA)
-
8
Excel VBAでマウスの左クリックのイベントを検知するには
Visual Basic(VBA)
-
9
VBAで任意のウインドウのサイズを変更する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外付ディスプレイで AutoHotkey...
-
エクセルVBAで画像を貼り付ける...
-
C#で、画像の、指定した座標の...
-
Windows、自作の画像生データを...
-
画像の座標取得
-
マウスイベントが動かない
-
VBでクリックイベントを発生さ...
-
uwscについて、同一の画像(仮...
-
高さのあるクォータービューの...
-
Windows APIの線などの描画につ...
-
コントロール名とそのプロパテ...
-
VBでプリンター制御コードを記...
-
正確なサイズの図形を印刷させ...
-
HSP 自機狙い
-
マウス自動クリックソフトについて
-
VBで路線図(画像)の駅名をク...
-
UWSC画像認識で座標の位置がず...
-
Excel VBAで他アプリケーション...
-
「ご処理進めて頂きますようお...
-
【Excel】特定の文字を含むセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで画像を貼り付ける...
-
Excel VBAで他アプリケーション...
-
C#で、画像の、指定した座標の...
-
VBでクリックイベントを発生さ...
-
外付ディスプレイで AutoHotkey...
-
マウスイベントが動かない
-
VBAで ScreenToClient を使いたい
-
バナーにリンクを埋め込む方法
-
NoxPlayerとUWSCのadbの座標に...
-
UWSC画像認識で座標の位置がず...
-
VBでデスクトップ上のアイコン...
-
UWSファイルの編集?
-
UWSCのCHKIMG関数について
-
画像中のある座標でマウスオー...
-
VBA HTML要素または文字の座標...
-
JPGの画像ファイルの結合
-
マウスストーカーのようにカー...
-
Unityでピクセル情報を取得する...
-
マウス位置の色を得る
-
uwscについて、同一の画像(仮...
おすすめ情報