[[20110311100848]] 『チェックボックスがすべて空白だった時の処理』(にゃり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『チェックボックスがすべて空白だった時の処理』(にゃり)

 おはようございます。
 質問です。

 チェックボックスが8個あるのですが
 全てにレ点が入らないときは何もしないとしたいのですが
 どうVBAで記述すれば良いかわかりません。
 よろしくお願いします。

 初心者なりに考えたのが以下の書き方。
 でもこれに固執していません。
 Function ほにゃらら()
 Select Case True
 Case 1
 ThisWorkbook.Worksheets("Main").CheckBox1.Value = False
 Case 2
 ThisWorkbook.Worksheets("Main").CheckBox2.Value = False
 Case 3
 ThisWorkbook.Worksheets("Main").CheckBox3.Value = False
 Case 4
 ThisWorkbook.Worksheets("Main").CheckBox4.Value = False
 Case 5
 ThisWorkbook.Worksheets("Main").CheckBox5.Value = False
 Case 6
 ThisWorkbook.Worksheets("Main").CheckBox6.Value = False
 Case 7
 ThisWorkbook.Worksheets("Main").CheckBox7.Value = False
 Case 8
 ThisWorkbook.Worksheets("Main").CheckBox8.Value = False
 GoTo aheahe
 End Select
 〜〜〜〜ここからレ点があるときの処理〜〜〜〜〜〜〜
 (中略)
 〜〜〜〜ここまでレ点があるときの処理〜〜〜〜〜〜〜
 aheahe:
 End Function

 上記の書き方をしても『レ点を押したときの処理』をしてしまいます。

 よろしくお願いします。

 こんな感じでカウントしてチェックが0個以上なら処理をする。
 というようにしてみては?

 Function ほにゃらら()
 Dim i As Long
 Dim cnt As Long 'チェックが入っている数のカウント用

 With ThisWorkbook.Worksheets("Main")
   For i = 1 To 8
     If .OLEObjects("CheckBox" & i).Object.Value = True Then
       cnt = cnt + 1
     End If
   Next i
 End With

 If cnt > 0 Then
   '〜〜〜〜ここからレ点があるときの処理〜〜〜〜〜〜〜
   '(中略)
   '〜〜〜〜ここまでレ点があるときの処理〜〜〜〜〜〜〜
 End If
 End Function

 (momo)

 ありがとうございました、momoさん!

 おかげで無事思っていたことができました!

 とここで終わらせてしまうと私は覚えが悪いので
 自分なりに解釈した内容を書きますので
 もし間違っていたら指摘お願いします。

 MainシートにあるOLEObjects("CheckBox"、つまりチェックボックスが
 Trueだったら(つまりレ点があったら)、
 cut変数に1づつ足しなさい。
 それをFor i = 1 To 8 つまり8回(チェックボックスが8個あるという前提)しなさい。

 そしてもし、cutの数が0より大きかったら、レ点があるときの処理をしなさい。
 もしcutの数が0より小さかったら(つまり0ならば)終わりなさい。

 こんな理解の仕方でOKでしょうか?

 そしてもしチェックボックスが増えた(or減った)場合は、
 For i = 1 To 8の「8」を増やしたり減らしたりすればOKでしょうか?

(にゃり)


 >とここで終わらせてしまうと私は覚えが悪いので
 >自分なりに解釈した内容を書きますので
 >もし間違っていたら指摘お願いします。

 回答していて嬉しくなりますね。

 >cut変数
 一応cutではなくcntという名前にしてます。
 countの略で・・・^^;
 ちなみにcountという文字は他のプロパティなどにもあるので使わないでください。
 例、Cells.Count のように

 >それをFor i = 1 To 8 つまり8回(チェックボックスが8個あるという前提)しなさい。
 解釈はほぼ合ってますが、微妙に違うのは
 8回ではなくて、CheckBox1〜CheckBox8をという事です。
 ですから、たとえば9個目と10個目のCheckBoxを作って9個目を消すと
 For i = 1 To 10 では9個目のCheckBox9が無いのでエラーになります。
 これはCheckBoxのプロパティでオブジェクト名を連番になるようにしておく必要があります。
 もちろん、新規のブックで最初から作った場合は連番になっていますが
 消したりすると連番が狂うので設定が必要です。

 >そしてもしチェックボックスが増えた(or減った)場合は、
 >For i = 1 To 8の「8」を増やしたり減らしたりすればOKでしょうか?
 上記で説明したとおり、基本的にはOKですが
 増やしたり消したりした場合はプロパティのオブジェクト名が連番になるようにしたうえで
 「8」の増減で大丈夫です。

 個数ではなく、"CheckBox" & 数字 という名前を作ってループしている事に注意してください。
 (momo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.