[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム イベントの共通化について』(かずま)
こんにちは。
ユーザーフォームについて質問をさせてください。
まず、今回作成しているファイルでは、Sheet1を開いた際に、UserForm1
が起動する様になっております。
UserForm1には、Label1〜Label20まで設定されております。
やりたい事としては、例えばLabel1をクリックした際にUserForm2が立ち上がり、UserForm2に設定されている2つのTextBox内に、Sheet2.Range("F2")、Sheet2.Range("G2")の内容が表示される様になっているのですが、それを
Label1をクリックした場合→Sheet2.Range("F2")、Sheet2.Range("G2")
Label2をクリックした場合→Sheet2.Range("F3")、Sheet2.Range("G3")
Label3をクリックした場合→Sheet2.Range("F4")、Sheet2.Range("G4")
・
・
・
とクリックしたLabelによって、上記のルールでUserForm2内のTextBoxの内容を変化させれないかと考えています。1つずつイベントを作ってUserFormを作れば出来ると思うのですが、共通化させる事は出来ないでしょうか?
現状、UserForm1と2の記述は以下の様になっております。
UserForm1
UserForm2.Show vbModeless
End Sub
UserForm2
Me.TextBox1.Value = Sheet2.Range("F2")
Me.TextBox2.Value = Sheet2.Range("G2")
どうぞ、よろしくお願い致します。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
クラスモジュール(Class1)を作成し、以下のように記述してください。
Private WithEvents lbl As Msforms.label Private text1 As Variant Private text2 As Variant
Public Sub lbl_Click() '※1ラベルをクリックしたときの動作 With UserForm2 .TextBox1.Value = text1 '下で登録するtext1とtext2をテキストボックスに表示させる .TextBox2.Value = text2 .Show vbModaless 'UserForm2を表示 End With End Sub
Public Sub Setup(ByVal mLabel As Msforms.label, ByVal Arg1 As Variant, ByVal Arg2 As Variant) '※2ラベルに情報を登録する命令を決める Set lbl = mLabel '変数lblにラベルオブジェクトを登録 text1 = Arg1 '変数text1とtext2に値を登録 text2 = Arg2 End Sub
また、UserForm1にはこれを書いてください。
Dim cls() As Class1 'クラス名をモジュール変数で宣言
Private Sub UserForm_Initialize() Dim i As Long ReDim cls(1 To 20) For i = LBound(cls) To UBound(cls) Set cls(i) = New Class1 '変数clsにクラスを新規登録 cls(i).Setup Controls("Label" & i), Sheet2.Range("F" & i + 1).Value, Sheet2.Range("G" & i + 1).Value '※2の命令で各ラベルに情報を登録する Next i End Sub
※1 個々のラベルをクリックしたときの命令です。UserForm1のコードではなくクラスモジュール側に書きます。
(虎ノ門ヒルズ) 2020/06/07(日) 17:23
参考に頂いたページからクラスモジュールについて色々調べては見たのですが、今の時点では理解が及びませんでした。
今回、書いて頂いたコードも理解出来ていない部分はありますが、参考に勉強させて頂きたいと思います。ありがとうございました。
(かずま) 2020/06/07(日) 17:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.