• ベストアンサー

ChexBox1等の「1」を変数にできますか教えて下さい

こんにちは VBA初心者で目下勉強中のものです さて、今作っているプログラム中で、ユーザーフォームのチェックボックス にチェックが入っているものをカウントするのに、FOR~NEXTで たとえばCheckBox1~ChexBox20まで回したいのですが、CheckBoxの後についている数字「1」等を変数「i」にすることはできるのでしょうか? どなたかご指導いただけないでしょうか 気持ちとしては、以下のようにしてみたいのですがエラーがでました For i = 1 to 20 CheckBox(i).Value = False Then Exit For .......... Next i とんちんかんな質問かもしれませんが、よろしくおねがいします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

チェックボックスのオブジェクト名がCheckBox1~CheckBox20だと仮定します。次のように式を書けば実行できます。 for i = 1 to 20 if フォーム名.controls("CheckBox" & i).value = false then exit sub else ・・・・・・   end if next i このとき、フォームモジュールのイベントプロシージャーに記述するのであれば、if Me.controls("CheckBox" & i).value = true then と書くこともできます。 もし、オブジェクト名がCheckBox1~CheckBox20でなければ、オブジェクト名は必ず○○1・○○2・・・・という風になっていますので ("CheckBox" & i)を("○○" & i)と書き換えてください。 実行して、エラーが出てきたときは、エラーメッセージを教えていただければ、対処の方法をアドバイスできると思います。

tomosato
質問者

お礼

早速のご指導ありがとうございました ご指摘いただいたとおりに書き直したところ、見事に解決しました この1週間ほど、この問題で書店などにあるいろいろな解説書を読みあさっても解決できなかった事が夢のようです。 本当にありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

コントロール配列を使えます。 1つチェックボックスをForm1に貼りつけ。 デザインモードの状態で、編集-コピー-編集をクリック。 「同じ・・・コントロール配列にしますか」に「はい」を クリック。ドラッグして、複写されて重なっているチェックボックスが見えるように、分離してずらす。後は貼りつけを繰り返す。 Private Sub Form_Click() MsgBox "sss" For i = 0 To 3 MsgBox Form1.Check1(i).Value Next i End Sub

tomosato
質問者

お礼

早速のご指導ありがとうございます この1週間試行錯誤してできなかったことが、解決できてほんとうにありがたく思っています。私のような初心者の質問にもかかわらず、丁寧にご説明いただき、心より感謝もうしあげます ありがとうございました

noname#6248
noname#6248
回答No.1

CheckBox(i).Value = False Then Exit For を If CheckBox(i).Value = False Then Exit For か If CheckBox[i].Value = False Then Exit For にすると言うのではダメですか? あるいは Forの前に Dim CheckBox(20) と書いて見るとか…全然自信無いですけどね…

tomosato
質問者

お礼

早速アドバイスいただき、ありがとうございました 結果的にはうまくいきませんでしたが、初心者にとっては このように、アドバイスいただけること自体がうれしくてなりません 本当にありがとうございました

関連するQ&A