トップ > 備忘録 > 【簡単解説】VBAクラスモジュール 3:実践 ユーザーフォームでの活用

【簡単解説】VBA クラスモジュール 3実践 ユーザーフォームでの活用

今回はユーザーフォームのコントロールとクラスモジュールの連携についてです。

内容

●ユーザーフォームでの活用
 ・複数のコントロール共有のイベント作成
 ・サンプルコード

サンプルファイル

記事に載せてあるコードサンプルのファイル ダウンロード


ユーザーフォームでの活用

複数のコントロール共有のイベント作成

今回は、ユーザーフォームに16のLabelコントロールを配置し、イベントを共有させる。
Labelの名前はLabel1~16で、それぞれ名前と同じ番号がCaptionプロパティに設定され表示されている。



モジュールは次の3つを使用している。
 ・クラスモジュール
 ・標準モジュール
 ・フォームモジュール
それぞれに記述のコードは次である。

●クラスモジュール
'宣言セクション ユーザーフォームのラベル型変数を
Private WithEvents myLabel As MSForms.Label 'イベントに応答するタイプで宣言

Public Property Get Label() As MSForms.Label 'ラベル取得用プロパティ Set Label = myLabel End Property
Public Property Let Label(newLbl As MSForms.Label) 'ラベル設定用プロパティ Set myLabel = newLbl End Property
Private Sub myLabel_Click() 'Class1共有のmyLagelクリックイベント Dim n As Long, s As String n = CLng(myLabel.Caption) 'ラベルに表示されている値を取得 If n Mod 2 = 1 Then s = "奇数" Else s = "偶数" MsgBox CStr(n), vbInformation, s End Sub
●標準モジュール
Sub Form_Show()
    UserForm1.Show
End Sub
●フォームモジュール
'宣言セクション
Private objLabel(1 To 16) As New Class1 '「Class1」はクラスモジュール名

Private Sub UserForm_Initialize() Dim i As Long For i = 1 To 16 'フォームのラベルをClass1のインスタンスにセット objLabel(i).Label = Me.Controls("Label" & i) Next End Sub

上記コードのクラスモジュールにあるようなWithEventsを伴う変数は、イベントに応答する。
イベントの種類は型で宣言したオブジェクトによる。今回のケースでは、MSForms.Label型なので、フォームのLabelイベントは全て利用できる。
利用できるイベントはリストボックスで確認できる。




標準モジュールの「Form_Show」を実行すると、ユーザーフォームのインスタンスが生成され表示される。
フォームのインスタンスが生成されるタイミングで、UserForm_Initializeイベントが発生し、Class1の各インスタンスのLabel型変数にフォーム上のLabelがセットされる。

フォームが表示された段階で、Class1の各インスタンスとLabelは紐づいている。
Labelをクリックすると、クリックされたLabelに対応するインスタンスのmyLabel変数がイベントを受けとり、myLabel_Clickイベントが発生する。
どのLabelが押されたかの判定は、myLabelのプロパティを確認することで行える。

下図は、フォームのLabel6をクリックした場面である。



今回、フォームモジュールに、クラスを破棄するコードを記述していないが、フォームを閉じるとクラスは自動的に破棄される。



ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.