Excel VBA質問箱 IV

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

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


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

【10409】イベントの処理をまとめて記述できませんか コロ 04/1/25(日) 16:09 質問
【10410】Re:イベントの処理をまとめて記述できませ... かみちゃん 04/1/25(日) 16:53 回答
【10411】Re:イベントの処理をまとめて記述できませ... コロ 04/1/25(日) 17:29 質問
【10412】Re:イベントの処理をまとめて記述できま... Jカーター 04/1/25(日) 19:06 回答
【10413】Re:イベントの処理をまとめて記述できませ... kein 04/1/25(日) 21:03 回答
【10440】Re:イベントの処理をまとめて記述できませ... コロ 04/1/26(月) 21:07 お礼

【10409】イベントの処理をまとめて記述できません...
質問  コロ  - 04/1/25(日) 16:09 -

引用なし
パスワード
   このHPにはいつもお世話になっていますが、
初めて質問させていただきます。

ユーザーフォームで、例えばチェックボックスを10個用意してクリックされた
ときの処理を以下のようにしたいと思ったとき、
このように10個なら10個すべて記述しなければならないのでしょうか?
1つにまとめて記述できないのでしょうか?
ぜひ教えてください。よろしくお願いします。

Private Sub Checkbox1_Click()
  If CheckBox1.Value = True Then TextBox1.Text = 1
End Sub
Private Sub Checkbox2_Click()
  If CheckBox2.Value = True Then TextBox2.Text = 1
End Sub
 .
 .
 .

Private Sub Checkbox10_Click()
  If CheckBox10.Value = True Then TextBox10.Text = 1
End Sub

【10410】Re:イベントの処理をまとめて記述できま...
回答  かみちゃん  - 04/1/25(日) 16:53 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ユーザーフォームで、例えばチェックボックスを10個用意してクリックされた
>ときの処理を以下のようにしたいと思ったとき、
>このように10個なら10個すべて記述しなければならないのでしょうか?
>1つにまとめて記述できないのでしょうか?

Controls(オブジェクト名)と指定する方法を使います。

Private Sub CheckBox1_Click()
 CheckBox (1) ' CheckBoxというのは、適当な名前です。
End Sub

Private Sub CheckBox2_Click()
 CheckBox (2)
End Sub

Function CheckBox(ControlNo As Integer)
 If Controls("CheckBox" & Format(ControlNo, "@")).Value = True Then Controls("TextBox" & Format(ControlNo, "@")).Text = ControlNo
End Function

【10411】Re:イベントの処理をまとめて記述できま...
質問  コロ  - 04/1/25(日) 17:29 -

引用なし
パスワード
   早速ありがとうございました。

ところで複数個の
 Private Sub CheckBox1_Click()
 ・・・
 End Sub

 Private Sub CheckBox2_Click()
 ・・・
 End Sub
 ・・・
を1つにすることはできませんよね?(^^;)

【10412】Re:イベントの処理をまとめて記述できま...
回答  Jカーター  - 04/1/25(日) 19:06 -

引用なし
パスワード
   ▼コロ さん:
クラスモジュールを使えばできそうですけど試してみますか?

★ユーザーフォームモジュール
Option Explicit
Dim ColCls As Collection
Private Sub UserForm_Initialize()
  Dim ClsT As Class1
  Dim i  As Long
  
  Set ColCls = New Collection
  For i = 1 To 10
    Set ClsT = New Class1
    Call ClsT.propertysSet(Me("CheckBox" & i), Me("TextBox" & i))
    ColCls.Add ClsT
    Set ClsT = Nothing
  Next i
End Sub

Private Sub UserForm_Terminate()
  Set ColCls = Nothing
End Sub

★クラスモジュール(Class1)
Option Explicit
Private WithEvents Chk As MSForms.CheckBox
Private Txt      As MSForms.TextBox

Sub propertysSet(ByVal ChkT As MSForms.CheckBox, ByVal TxtT As MSForms.TextBox)
  Set Chk = ChkT
  Set Txt = TxtT
End Sub

Private Sub Chk_Click()
  If Chk Then
    Txt.Value = 1
  Else
    Txt.Value = ""
  End If
End Sub

という感じです。
違ったらすいません。

【10413】Re:イベントの処理をまとめて記述できま...
回答  kein  - 04/1/25(日) 21:03 -

引用なし
パスワード
   ダイアログシートを使う手があります。↓こちらを参考にして下さい。
http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200401/04010224.txt

【10440】Re:イベントの処理をまとめて記述できま...
お礼  コロ  - 04/1/26(月) 21:07 -

引用なし
パスワード
   みなさん、ありがとうございました。

Jカーターさんの「クラスモジュールを使う」方法や
keinさんの「ダイアログシートを使う」方法は
今の私には難易度が高すぎるようですので、
かみちゃんさんの「Controls(オブジェクト名)と指定する方法」を
使わさせていただきたいと思っています。

今後もお世話になると思いますので、よろしくお願いします。

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