Excel VBA質問箱 IV

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

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


11660 / 13646 ツリー ←次へ | 前へ→

【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 お礼[未読]

【14898】同機能の複数イベントプロシージャをまと...
質問  なおき  - 04/6/9(水) 16:58 -

引用なし
パスワード
   初めて送ります、初心者です。

お教え願いたいのですが、
例えば、スピンボタンとテキストボックスが1セットで、
スピンボタンを操作すると、対のテキストボックスに
値が反映される、さらにシート上のセルに代入するような
イベントプロシージャを作成したとします。
下記のような感じでしょうか。

Private Sub SpinButton1_Change()
  TextBox1.Text = SpinButton1.Value
  Cells(10, 20).Value = TextBox1.Text
End Sub

このセットが同一UserForm上に、仮に100個あり、個別に
動作させる場合、簡略して記述する方法はないのでしょうか。
(値を代入するセルの位置は、セットによって変わります)

現在は、上記の記述を、必要数全て書いていますが、変更作業
などが非常に大変です。
ちんぷんかんぷん、または低レベルな質問で恐縮ですが、
どなたかご教示のほどよろしくお願いいたします。

【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

確認してみて下さい。


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

【14902】Re:同機能の複数イベントプロシージャを...
回答  ichinose  - 04/6/9(水) 18:36 -

引用なし
パスワード
   >>お教え願いたいのですが、
>>例えば、スピンボタンとテキストボックスが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個   ------(Spinbutton1〜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
>
>確認してみて下さい。
>
>
>クラスモジュールのポピュラーな用途です。

【14905】Re:同機能の複数イベントプロシージャを...
お礼  なおき  - 04/6/9(水) 21:21 -

引用なし
パスワード
   ichinose 様

大変ありがとうございました。
なにぶん勉強不足でまったくこのような方法を知りませんでした。

なるほどご指示通りにやってみますと、今まで何十行(何百行?)
かかっていた記述が、大変すっきりしました。

後々また、つまらぬ質問を投げかけるかもしれませんが、
その際は、よろしくお願いいたします。

自分もさらに勉強に励もうと思う、今このごろです。

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