Page 349 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼オブジェクト変数の設定(その2) みんと 02/11/15(金) 12:50 ┗Re:オブジェクト変数の設定(その2) つん 02/11/15(金) 13:21 ┗できましたん♪ みんと 02/11/15(金) 14:06 ─────────────────────────────────────── ■題名 : オブジェクト変数の設定(その2) ■名前 : みんと ■日付 : 02/11/15(金) 12:50 -------------------------------------------------------------------------
オブジェクト変数について,もうひとつ,お願いします。 ユーザーフォームにフレームとオプションボタンがいくつかあります。 フレームをクリックしたとき,オプションボタンの選択をクリアしたいの ですが,フレームの中にオプションボタン以外のコントロールがあると エラーになります。 Sub Frame1_Click() Dim opt As MSForms.OptionButton Dim fra As Controls Set fra = UserForm1.Frame1.Controls For Each opt In fra opt.Value = False Next End Sub フレームの中にテキストボックスとかがあるとオプションボタンを Falseにしたあと,最後にNEXTでエラーがでます。 (エラー13,型が違います。ってやつです。) optはOptionButton型で宣言しているのに・・・なぜ? For Eaceの使い方が悪いのか,Inの指定方法が悪いのか? オプションボタン以外も見に行って,エラーになってる・・・ ような気がします? 対処法など,よろしくお願いします。 |
こんにちは。 また、私で失礼します〜 >Sub Frame1_Click() > Dim opt As MSForms.OptionButton > Dim fra As Controls > > Set fra = UserForm1.Frame1.Controls > > For Each opt In fra > opt.Value = False > Next > >End Sub > >optはOptionButton型で宣言しているのに・・・なぜ? >For Eaceの使い方が悪いのか,Inの指定方法が悪いのか? >オプションボタン以外も見に行って,エラーになってる・・・ >ような気がします? For Each opt In fra ここで、変数optには、順番にFrame1のコントロールが代入されていくことになります。 なので、OptionButton型にして宣言していても、例えばテキストボックスがあれば、テキストボックスも代入されてしまうので、ここで「型が違います」のエラーが出てくるのだと思います。 optを、オブジェクト型にしておいて、オプションボタンかどうかを判断させればいいかなとも思いますが、こういう場合は、私はいつもこんな感じにしています。 Private Sub Frame1_Click() Dim i As Long For i = 0 To Frame1.Controls.Count - 1 If TypeName(Me.Controls(i)) = "OptionButton" Then Me.Controls(i).Value = False End If Next i End Sub 参考にしてみてちょ♪ |
▼つん さん: ふたたび,ありがとうございます〜! (じつは,ちょっと期待してたりして。笑) オプションボタンの判定も,トライしたことがあったのですが,今思い出すと, 最初のDimのところでオプションボタン型にしちゃってるので, NEXTで次のコントロール(オプションボタン以外)を呼んできてエラーに なるんですね。(たぶん) アドバイスをちっとアレンジしてこうしてみました。 Private Sub UserForm_Click() Dim opt As MSForms.Control Dim fra As Controls Set fra = UserForm1.Frame1.Controls For Each opt In fra If TypeName(opt) = "OptionButton" Then opt.Value = False End If 'If (TypeOf opt Is MSForms.OptionButton) Then ' opt.Value = False 'End If Next End Sub frameのクリックじゃなくってuserformのクリックにしたのは単にテストする のにラクだったからでイミはありません。(^^;) ちょっとカタクナにFor Eachをつかってみました。 条件文はつんさんのコードです。 コメントアウトで示した形式でもいーみたいっす。 無事,目的の動作を得ることが出来ました! ありがとうございましたっ!! 素早い回答,重ねてお礼申し上げるっす! |