Excel VBA質問箱 IV

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

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


66397 / 76734 ←次へ | 前へ→

【14901】Re:同機能の複数イベントプロシージャをまとめて記述したい
回答  ichinose  - 04/6/9(水) 18:32 -

引用なし
パスワード
   ▼なおき さん:
こんばんは。

>お教え願いたいのですが、
>例えば、スピンボタンとテキストボックスが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

確認してみて下さい。


クラスモジュールのポピュラーな用途です。
2 hits

【14898】同機能の複数イベントプロシージャをまとめて記述したい なおき 04/6/9(水) 16:58 質問
【14901】Re:同機能の複数イベントプロシージャをま... ichinose 04/6/9(水) 18:32 回答
【14902】Re:同機能の複数イベントプロシージャをま... ichinose 04/6/9(水) 18:36 回答
【14905】Re:同機能の複数イベントプロシージャをま... なおき 04/6/9(水) 21:21 お礼

66397 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free