[[20221031173701]] 『チェックボックス解除コード』(コンタ) ページの最後に飛ぶ

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

 

『チェックボックス解除コード』(コンタ)

ご教授ください
チェックボックスを使用して円状のオブジェクトをON/OFFする
記述を行ないました。(下記コード)
Sub 例1()

Dim BName As String
Dim cb As CheckBox

    'クリックされたチェックボックスの名前を取得
    BName = Application.Caller

    'クリックしたチェックボックスが 「CheckBox1」 だったら
    If BName = "CheckBox1" Then

        'セルEK26がTrueだったら
        If Range("EK26") = True Then
            With ActiveSheet.Shapes.AddShape(msoShapeOval, 27.5, 361.1, 14.3, 14.3)

                '図形に名前を付ける
                .Name = "rect1"
            End With
        Else
            '図形 「rect1」 を削除
            On Error Resume Next
                ActiveSheet.Shapes("rect1").Delete
            On Error GoTo 0
上手く動作しているのですがチェックボックス複数の一括解除等を
実行するコードを作成し実行しましたがチェックボックスの
チェックを外すことは出来るのですがオブジェクトが消えてくれません。
(上記コードでチェックボックスを実際にクリックする記述が
ある為と思われます。)
上記コードを維持したまま複数のチェックボックスを一括で全数解除
を出来るコードは出来ないでしょうか?

< 使用 Excel:unknown、使用 OS:unknown >


すみません
足りてませんでした
オブジェクトも同時に削除できるコドです。
(コンタ) 2022/10/31(月) 17:55:25

 ON/OFFするって、結構頻繁に切り替える想定なんでしょうかね?

 見える/見えない以外に毎回Shapeを削除したり追加したりしなきゃいけない理由がないのなら
 表示/非表示の切り替えでだけも良いのではないかと思うのですが...

 そうすれば「ShapeのVisibleを対応する各CheckBoxの値に合わせる」って書き方も出来るでしょうし、
 ホントに消したい時にだけ使うマクロも別途用意しておけますし。

(白茶) 2022/10/31(月) 18:53:25


 ↑だけじゃちょっと意図が伝わらないかと思って追記。
 雑な例でスマセンですが、表示/非表示の切り替えでやってしまうなら

 Shape-----[Oval1][Oval2][Oval3][Oval4]...
 CheckBox--[CheckBox1][CheckBox2][CheckBox3][CheckBox4]...
 Button----[HideAll]

 って配置しておいて、各CheckBoxとButtonに↓のマクロを登録

    Sub 例2()
        Dim n As String, p As Shape, c As Long
        n = Application.Caller
        If n = "HideAll" Then                                             '[HideAll]ボタン押下時
            For Each p In ActiveSheet.Shapes
                If p.Name Like "Oval*" Then p.Visible = False               '○を隠す
                If p.Name Like "CheckBox*" Then p.ControlFormat.Value = 0   'チェックも外す
            Next
            ActiveSheet.Buttons("HideAll").Visible = False                  '[HideAll]ボタンも隠す
        Else
            Set p = ActiveSheet.Shapes(Replace$(n, "CheckBox", "Oval"))   '[CheckBox]押下時
            p.Visible = Not p.Visible                                       '○の表示状態を反転
            For Each p In ActiveSheet.Shapes
                If p.Name Like "Oval*" And p.Visible Then c = c + 1
            Next
            ActiveSheet.Buttons("HideAll").Visible = (c > 0)              '表示中の○があれば[HideAll]ボタンを表示
        End If
    End Sub

 という感じの仕掛けでイケたりしないかなぁ... と思ったのでした。
 「いや、消さなきゃならないのです」という事なら無視して下さい。

(白茶) 2022/10/31(月) 19:29:04


コメント返信:

[ 一覧(最新更新順) ]


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