| 
    
     |  | ▼Hi さん: おはようございます。
 
 >ユーザーフォーム上オプションボタンを8ケ作っています。
 >それぞれのボタンが押されたとき、Msgboxで表示したいのですが・・・
 >
 >下のコードのClickを使うと8ケのコードになってしまいます。
 >Private Sub OptionButton5_Click()
 >  MsgBox "オプションボタンの 5 が選択されました"
 >End Sub
 >
 >8ケのコードを1ケのコードに出来ないか・・・
 >変数を使いChangeで作成できないか検討してコードを書きましたが
 >上手く行きません。下のコードのどこが問題かアドバイスお願いします。
 
 下のコードで
 
 オプションボタンの選択を変えたときに
 
 「xxが選択されました」
 
 とメッセージが表示されない
 
 ということですか?
 それは、そうでしょうねえ!!
 「OptionButton_Change」
 というイベントはオプションボタンにはありませんから、
 オプションボタンの変更で下のコードは実行されません。
 
 >Private Sub OptionButton_Change()
 > Dim i As Integer
 > For i = 1 To 8
 >Select Case i
 > Case 1 To 8
 >  MsgBox Controls("OptionButton" & i) & "が選択されました"
 > Next i
 >End Select
 >End Sub
 
 
 対処1
 クラスモジュールを使用する方法です。
 過去ログを「クラスモジュール」で調べて見てください。
 
 対処2
 
 仕様を変更する。
 「オプションボタンを変更した時点でメッセージを表示するのではなく、
 オプションボタンを変更し、コマンドボタンをクリックした時点で
 メッセージを表示する に変更する」
 という方法です。
 これなら、
 
 コマンドボタン(Commandbutton1)を配置すれば、
 
 Private Sub CommandButton1_Click()
 Dim i As Long
 For i = 1 To 8
 If Controls("optionbutton" & i).Value Then
 MsgBox i & "が選択されました"
 Exit For
 End If
 Next
 End Sub
 
 こんなコードで可能です。
 
 検討してみて下さい
 
 |  |