teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

イベントの動作について補足。

2019/02/14 14:14

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -4,13 +4,17 @@
4
4
 
5
5
  あとはマウスのボタンが放されたときに、その位置を元にセルを取得できれば良さそうということになります。
6
6
 
7
- ListBoxなどには、[MouseDown、MouseUp イベント](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/mousedown-mouseup-events)があるので、これを使えば、マウスのボタンが放されたタイミングは捕捉できます。
7
+ ListBoxなどには、[MouseDown、MouseUp イベント](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/mousedown-mouseup-events)があます。
8
+ このイベントはドラッグ開始点がそのコントロール上であれば、コントロール外でボタンを放したとしてもその時点でMouseUpイベントが発生します。
9
+ そのため、これでマウスのボタンが放されたタイミングも捕捉できます。
10
+ もう一つ必要な情報のマウスの位置ですが、こちらはMouse関連のイベントだけでは取得がちょっと難しいです。
11
+ イベントの引数のX、Yはありますが、これら相対位置になるので、絶対位置への変換&画面上への座標系の変換が必要になります。
8
12
 
9
- マウスの位置は、こちらのイベントだけでは取得がちょっ難しいです。
13
+ りあえず最低限必要そうな部品は以上になります。
10
- イベントの引数のX、Yは相対位置になるので、絶対位置への変換&画面上への座標系の変換が必要になります。
11
14
 
12
- これらを踏まえて実装してみたのが以下のコードになります。
13
15
 
16
+ 上記のことを踏まえて私が適当に実装してみたのが以下のコードになります。
17
+
14
18
  リストボックスの名前は`ListBox1`としています。
15
19
 
16
20
  ```vba
@@ -112,4 +116,6 @@
112
116
 
113
117
  Let mouseEventIsOnForm = True
114
118
  End Function
115
- ```
119
+ ```
120
+
121
+ 一部挙動が微妙なところはありますが、恐らくイメージに近いものだと思われます。