こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Access VBAのイベント共有について

こんにちは。
初めて質問をさせて頂きますcimappleと申します。よろしくお願いいたします。
現在、業務にて使用するデータベースをAccessにて作成しておりまして、VBAにてフォームの各処理を記述しています。
ちなみに、当方Access、VBAについて超初心者ですので、そもそもの誤解がある部分もあるかと思いますが、ご容赦ください。

さて、質問の内容ですが、今回フォーム上にある14個のラベルを、マウスカーソルが乗った時(MouseMoveイベント)にそのラベルの背景色を変えるコードを組みたいと考えています。
現状としては、それぞれのラベルのMouseMoveイベントに背景色を変えたり、戻したりといったコードを記述していますが、当然非効率かつ面倒なのです。
そこで、このイベントを共有化したいと考え、いろいろと検索したところ、クラスモジュール(Private WithEvents)にてそういったことができそう・・・というところまでは辿り着いたのですが、その先が全く分かりません。
Excelについてのクラスモジュールの記事はたくさん見つけて、コピーペースト見よう見まででマネてはみたのですが、当然うまくいかず、そこから先に進めないでおります。

クラスモジュールについて基礎から勉強しなさいと言われればその通りなのですが、どうかお知恵をお貸し頂きたく質問させていただきました。
よろしくお願いいたします。

以下、見よう見まねの現在のコードです。
ちなみに、フォーム名はFRM1、ラベル名はそれぞれLbl○、クラスモジュール名はCLS1となっています。

Form(FRM1)のコード
=======================================================
Option Compare Database
Option Explicit

Dim MyLbl(14) As CLS1

Private Sub Form_Load()
Dim Lbl As Access.Label
Dim i As Integer

For i = 1 To 14
Set Lbl = Me.Controls("Lbl" & i)
Set MyLbl(i) = New CLS1
Set MyLbl(i).Label = Lbl
Next
End Sub
=======================================================


Class(CLS1)のコード
=======================================================
Option Compare Database
Option Explicit

Public WithEvents Label As Access.Label

Private Sub Label_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Label.BackColor = 225
End Sub
=======================================================

長文かつ駄文で申し訳ありませんでした。

投稿日時 - 2013-02-16 00:07:26

QNo.7947371

困ってます

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

とりあえずラベル2個だけ。Acc2010で試しています。
先日、帳票フォームのテキストボックスのクリックイベントを、テキストボックス名を決め打ちしないで汎用的に処理したいと悩みまくったところですので、若干のアドバイスをさせていただきます。ご参考まで。

☆フォームモジュール
Private MyLbl(2) As Class1

Private Sub Form_Load()
Dim Lbl As Access.label
Dim i As Integer

For i = 1 To 2
Set Lbl = Me.Controls("Lbl" & i)
Set MyLbl(i) = New Class1
Set MyLbl(i).label = Lbl
Next
End Sub

☆クラスモジュール
'Publicだとエラーになる
'変数名がlabelだと、コントロール名と重なって変なエラーになると嫌なので変更
Private WithEvents myLabel As Access.label

'このプロパティのセット部が欠落-クラスモジュールの理解不足
Public Property Set label(newLabel As Access.label)
Set myLabel = newLabel
'Accessではこれの設定が必要 - 先日はまったところです
myLabel.OnMouseMove = "[Event Procedure]"
End Property

'引数がVBEで自動生成されるものと違っていた
Private Sub myLabel_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
myLabel.BackColor = 225
End Sub

投稿日時 - 2013-02-16 01:19:08

お礼

早速のご回答ありがとうございます!!
mitarashi様のおっしゃる通りコードを記述したら、やりたいことができました!

なるほど、プロパティのセットとは全然理解できておりませんでした。
"[Event Procedure]"の所も、全く理解できていませんが、どこかでそんな記事を見たような・・・という感じでした。

私にはやっぱりまだクラスを理解するには勉強が足りないと思いました。
大変勉強になりました!
今後もっとしっかり勉強します!

今回は本当にありがとうございました!!
助かりました。

投稿日時 - 2013-02-16 04:08:03

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問