Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


160 / 2272 ツリー ←次へ | 前へ→

【12762】OnMouseDownでShiftを取得するには? キンパレ 15/3/25(水) 0:39 質問[未読]
【12765】Re:OnMouseDownでShiftを取得するには? hatena 15/3/25(水) 2:37 回答[未読]
【12776】Re:OnMouseDownでShiftを取得するには? キンパレ 15/3/25(水) 23:35 お礼[未読]

【12762】OnMouseDownでShiftを取得するには?
質問  キンパレ  - 15/3/25(水) 0:39 -

引用なし
パスワード
   初めて投稿します。
至らぬ点があればご指摘ください。
よろしくお願い致します。

【質問】
フォーム上にラベルT1〜T30があったとします。
ラベルをクリックすることでキャプションをメッセージボックスで表示
するようにする場合、

Private Sub T1_Click()
  
  MsgBox Me.T1.Caption
  
End Sub

というプロシージャをT1〜T30まで個別に記述したのでは大変ですから、

Private Sub Form_Open(Cancel As Integer)

  For i = 1 To 30
    Me("T" & i).OnClick = "=msg(" & i & ")"
  Next i

End Sub

Private Function msg(n As Integer)

  MsgBox Me("T" & n).Caption

End Function

このようにフォームオープン時に一括設定にできますよね。

これをClickイベントではなくMouseDownイベントで引数を取得したい場合は
どのように記述すれば良いのでしょうか。
たとえばShiftを押しながら右クリックした場合にMsgBoxを出すようにします。
個別に記述すると下記のようになります。

Private Sub T1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

  If Shift = 2 Then
    MsgBox Me.T1.Caption
  End If
  
End Sub

これを前述のOnClickのように纏めて設定するようにしたいのですが、
引数の部分をどのように記述すれば良いかがわかりませんでした。
引数なしで書くと下記のような感じです。

Private Sub Form_Open(Cancel As Integer)

  For i = 1 To 30
    Me("T" & i).OnMouseDown = "=msg(" & i & ")"
  Next i

End Sub

色々と検索してみたのですが、調べ方が悪いのかどうしても
該当する情報に辿りつけませんでした。
ご教示いただければ幸いです。
どうぞ宜しくお願いいたします。

【12765】Re:OnMouseDownでShiftを取得するには?
回答  hatena  - 15/3/25(水) 2:37 -

引用なし
パスワード
   方法としては下記の2つですね。

1.APIを使ってシフトキーが押されているかどうか判定する。

下記が参考になるかと。

3.1 キーボードからの入力を判定する- Excel VBA ゲーム Tips
www.happy2-island.com/excelsmile/smile04/capter00301.shtml

2.クラスモジュールを使う

下記にラベルをクラスにするコード例があります。これを少し変更すれば希望のことは可能ですので参考にしてください。

ドラッグできるラベルのクラス化 - hatena chips
hatenachips.blog34.fc2.com/blog-entry-160.html

【12776】Re:OnMouseDownでShiftを取得するには?
お礼  キンパレ  - 15/3/25(水) 23:35 -

引用なし
パスワード
   hatenaさま

ご回答ありがとうございます。
やはり普通にはできないのですね。
クラスモジュールのリンク先内容を試したところ、
応用すればやろうとしていることが実現できそうです。
この機会にクラスについても勉強しようと思います。

大変助かりました。
この度はどうもありがとうございました。

160 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free