- ベストアンサー
チェックボックスで指定出来る数を制限したい
ユーザーフォームにて、合計20個のチェックボックスを表示させ、そのうち12個を選択させたいと考えています。 その際、12個以上は選択出来ないようにする事は可能でしょうか? ※「12個以上選択した状態で決定するとエラーメッセージを表示させる」といった感じのプログラムは組めますが、もし可能であれば12個以上選択出来ないようにしたいです
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
'Index付きCheckBoxの場合の例です。 '参考にしてください。 '(1)CheckBoxをClickした時チェックの場合 Private Sub Check1_Click(Index As Integer) Dim wCnt As Integer ' wCnt = 0 For wI = 1 To 20 If Check1(wI).Value = 1 Then wCnt = wCnt + 1 If wCnt > 12 Then MsgBox "チェックMAX件数(12)を超えています。" Check1(wI).Value = 0 '抜ける Exit Sub End If End If Next End Sub '(2)決定ボタンを押した時チェックの場合 Private Sub Command1_Click() Dim wI As Integer Dim wCnt As Integer ' wCnt = 0 For wI = 1 To 20 If Check1(wI).Value = 1 Then wCnt = wCnt + 1 End If Next If wCnt > 12 Then MsgBox "チェックMAX件数(12)を超えています。" '抜ける Exit Sub End If '次の処理へ進む '/////////////// End Sub (1)の方法をお勧めします。
その他の回答 (2)
- Mnosan
- ベストアンサー率25% (9/36)
12個選択した段階でチェックボックス自体を表示しなくするでは駄目ですか?
- pick52
- ベストアンサー率35% (166/466)
VB自体はよく分からないので明確に回答はできませんが、 チェックボックスはボタンの一種なので選択すると onclick イベントが発生するはずです。 そこで、チェックされている数を調べてチェックされている数が 12個以上ならその押したチェックボックスのチェックを外すことで 対応できそうです。 でも、複雑なことやり過ぎると不具合の原因にもなりますし、 無難な方法で対応した方がいいと思いますよ。
お礼
迅速かつ的確な回答を頂きどうもありがとうございました。 Private Sub CheckBox1_Click() Dim wCnt As Integer 'チェックの数を格納 Dim m As Integer wCnt = 0 For m = 1 To 23 If Controls("CheckBox" & m).Value = "True" Then wCnt = wCnt + 1 If wCnt > 12 Then MsgBox "チェックMAX件数(12)を超えています。" Controls("CheckBox" & 1).Value = "False" '抜ける Exit Sub End If End If Next End Sub Private Sub CheckBox2_Click() Dim wCnt As Integer 'チェックの数を格納 Dim m As Integer wCnt = 0 For m = 1 To 23 If Controls("CheckBox" & m).Value = "True" Then wCnt = wCnt + 1 If wCnt > 12 Then MsgBox "チェックMAX件数(12)を超えています。" Controls("CheckBox" & 2).Value = "False" '抜ける Exit Sub End If End If Next End Sub ・・・ といった感じで全てのチェックボックスに対しプログラミングする事で、所望の動作をさせる事が出来ました。本当にどうもありがとうございます。