|
▼なおき さん:
こんばんは。
>お教え願いたいのですが、
>例えば、スピンボタンとテキストボックスが1セットで、
>スピンボタンを操作すると、対のテキストボックスに
>値が反映される、さらにシート上のセルに代入するような
>イベントプロシージャを作成したとします。
>下記のような感じでしょうか。
>
>Private Sub SpinButton1_Change()
> TextBox1.Text = SpinButton1.Value
> Cells(10, 20).Value = TextBox1.Text
>End Sub
>
>このセットが同一UserForm上に、仮に100個あり、個別に
>動作させる場合、簡略して記述する方法はないのでしょうか。
>(値を代入するセルの位置は、セットによって変わります)
スピンボタンのChangeイベントなら、クラスモジュールを使用すると
可能です。
100個のセットではテストが大変だったので3個のセットにしてみました。
ユーザーフォーム(Userform1)には
テキストボックスが3個-----(Textbox1〜Textbox3)
スピンボタン3個 ------(Spinbutoon1〜Spinbutton3)
クラスモジュールを挿入して下さい(既定名のClass1をそのまま使います)
クラスモジュールのコードは、
'=============================================================
Public txt As msforms.TextBox
Public WithEvents spin As msforms.SpinButton
Public id As Long
Private Sub spin_Change()
txt.Text = spin.Value
Cells(id, 20).Value = txt.Text
' ↑これは、仕様が分からないのでアレンジしました。
' idの値を見て、個別の処理も記述できます。
End Sub
で、Userform1のモジュールには、
'===================================================================
Private sample(1 To 3) As New Class1
' ↑100の場合は、100にする
Private Sub UserForm_Initialize()
For idx = 1 To 3 '←ここも100回ループ
With sample(idx)
.id = idx
Set .spin = Controls("spinbutton" & idx)
Set .txt = Controls("textbox" & idx)
End With
Next idx
End Sub
確認してみて下さい。
クラスモジュールのポピュラーな用途です。
|
|