【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ

下記マクロでチェックボックスの右隣のセルにtrue、falseを表示させています

With ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1)
.Value = Not .Value
End With

また別のマクロ(マクロボタンを作っている)で、チェックボックスのレ点を消しています

Dim chkBox As CheckBox

For Each chkBox In ActiveSheet.CheckBoxes
chkBox.Value = False

Next chkBox


2番目のマクロを実行すると、
レ点は消えるのでが、右隣はtrueのままでfalseになりません
жチェックボックスにレ点をいれると、falseになり、外すとtrueになります

チェックボックスのレ点を一括で消して、trueからfalseになるようにするにはどのようにすればよろしいでしょうか?

よろしくお願いします。

A 回答 (2件)

fujillinさんのおっしゃる通りなんですけど別の視点から


お話させてください。
vbaで大切なのは自分で確認することなんです。
何が起きているのかを自分の目でチェックする事で
より理解は確かなものになります。
例えば
With ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1)
.Value = Not .Value
End With
この 
.Value = Not .Value
の行にブレークポイントをセットしたことはございますか?
これをやってみるととにかくチェック可能なことが沢山あります。

例えばブレークポイントをセットしてチェックボックスを叩くと
その行で停止しますから、イミディエイトウィンドウに

? Application.Caller

? ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address

? ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1).Address

? ActiveSheet.Shapes(Application.Caller).TopLeftCell.Offset(0, 1).Value

これらが何を表示しているかの意味はご理解いただけるでしょうか?
それを表示されるものと、目に見えているセルの状態から
構造を頭の中で整理する作業が大切なんです。
    • good
    • 0
この回答へのお礼

うーん・・・

お礼日時:2024/05/23 20:13

こんばんは



ご質問の「チェックボックス」は、シート上に直接フォームコントロールのチェックボックスを設定しているものと仮定しての回答です。
(ActiveXのチェックボックスの場合は、少し話が変わりますので)

>チェックボックスのレ点を一括で消して、trueからfalseになるように
>するにはどのようにすればよろしいでしょうか?
一番簡単なのは、各チェックボックスのリンクセルとして、それぞれの左側のセルを設定して、1番目のマクロを削除することでしょう。
これによって、2番目のマクロでチェックボックスの値を変更した際に、自動的にセルの値にも反映されるようになります。


「そんなことは聞いてねぇ!」とおっしゃるのであれば・・
2番目のマクロでチェックボックスをクリアした際に、同時にセルの値もクリアに設定するようにしておけば済む話のように思います。

ちなみに、1番目のマクロは、チェックボックスの値に関係なくセルの値を反転(=トグル)表示するものになっていることは理解していますか?
例えば、チェックボックスを非選択、セル値をTRUEの状態から始めると、ずっと表示とチェック状態は逆転したままになります。
チェックボックスの値を反映してセル値を決める様にしておいた方が宜しいかも知れませんね。
    • good
    • 1
この回答へのお礼

ありがとう

お礼日時:2024/05/23 20:13

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

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


おすすめ情報

このQ&Aを見た人がよく見るQ&A