この人頭いいなと思ったエピソード

ユーザーフォームにて、合計20個のチェックボックスを表示させ、そのうち12個を選択させたいと考えています。

その際、12個以上は選択出来ないようにする事は可能でしょうか?

※「12個以上選択した状態で決定するとエラーメッセージを表示させる」といった感じのプログラムは組めますが、もし可能であれば12個以上選択出来ないようにしたいです

A 回答 (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)の方法をお勧めします。
    • good
    • 0
この回答へのお礼

迅速かつ的確な回答を頂きどうもありがとうございました。

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
・・・
といった感じで全てのチェックボックスに対しプログラミングする事で、所望の動作をさせる事が出来ました。本当にどうもありがとうございます。

お礼日時:2008/09/22 16:06

12個選択した段階でチェックボックス自体を表示しなくするでは駄目ですか?

    • good
    • 0

VB自体はよく分からないので明確に回答はできませんが、


チェックボックスはボタンの一種なので選択すると
onclick イベントが発生するはずです。
そこで、チェックされている数を調べてチェックされている数が
12個以上ならその押したチェックボックスのチェックを外すことで
対応できそうです。

でも、複雑なことやり過ぎると不具合の原因にもなりますし、
無難な方法で対応した方がいいと思いますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報