|
kouka さん、こんばんわ。
>
>頭が爆発してしまいそうですが、私なりに考えてみました。
>>Sub test()
>> Dim sh As Shape, sh2 As ControlFormat
>> For Each sh In ActiveSheet.Shapes
> ↑図形を格納(ループ)
>> If sh.Type = msoFormControl Then
> ↑格納した図形はチェックボックスかどうか判定(フォームのアイテムかどうかを確認、四角形、直線、写真等を無視)
>> If sh.FormControlType = xlCheckBox Then
> ↑チェックボックスの中身を判定?(そのアイテムがチェックボックスかどうかを確認)
>> Select Case sh.ControlFormat.Value
>> Case 1: Msg = "チェックあり" 'TRUE
> ↑オンの時は『1』を返しますよね?
>> Case -4146: Msg = "チェックなし" 'FALSE
> ↑??
>> Case Else: Msg = "淡色表示 " '#N/A(淡色)
>> End Select
>> MsgBox Msg, vbInformation, sh.Name
>> End If
>> End If
>> Next
>>End Sub
>と、いうように見てみましたが、やっぱり間違ってます?(汗)
>
>オフの時の記述ですが、『-4146』になってますよね?
>>Sub test()
>> Dim sh As Shape, sh2 As ControlFormat
>> For Each sh In ActiveSheet.Shapes
>> If sh.Type = msoFormControl Then
>> If sh.FormControlType = xlCheckBox Then
MsgBox sh.ControlFormat.Value, vbInformation, sh.Name & ".Value"
>> End If
>> End If
>> Next
>>End Sub
これで表示して内容を確認しました。
>オフの時の記述ですが、『-4146』になってますよね?
>これってVBAの決まり事なのですか?
決まりごとかどうかはわかりませんが、チェックして値をメッセージで出したらそうなったので。
>てっきりオフのときは『0』かと思ってましたが。。。
私もそう思ってました。
検索したら、ここの過去ログがヒットしました。
h t t p://www.vbalab.net/vbaqa/data/excel/log/tree_520.htm#2640
私のと似たようなコードでした。
>あと変数『sh2』はどこで使っているのでしょう?
すみません、使っていません。
メンバリストを確認するのに宣言したのですが、使わなかったのに消すのを忘れていました。ややこしくしてごめんなさい。
あと、向こうの枝でみましたがボタンのイベントで転記するならば、チェックボックスにリンクセルを設定してそのセルの内容で分岐するようにしたほうが、チェックボックスでループするよりも管理しやすいと思います。
|
|