質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

7720閲覧

VBAでチェックボックスを有効にしたときに、それをイベントとして別のチェックボックスが有効になるようにしたいです

gunma_user

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/05/28 11:00

編集2020/05/29 08:27

チェックボックスはフォームコントロールで作成しました。

まず以下のようなVBAを書きました。
これは「チェック 7」という名前のチェックボックスを右クリック→「マクロの登録」から標準モジュールのVBA編集画面を開いて作成しました。

Sub チェック1_Click() If ActiveSheet.CheckBoxes(3).Value = xlOn And ActiveSheet.CheckBoxes(2).Value = xlOn Then ActiveSheet.CheckBoxes("チェック 7").Value = xlOn End If End Sub

ここまでは正常に動作していて、2つのチェックボックスが両方とも有効になったときに「チェック 7」のチェックボックスが有効になるようになっています。

次に、上の処理でチェックボックスにチェックが入って有効になったときに発動することを想定して以下のようなVBAを書きました。
こちらは標準モジュールではなく「Microsoft Excel Objects」の中の「Sheet1(Sheet1)」に書きました。

Sub test2() If ActiveSheet.CheckBoxes("チェック 7").Value = xlOn Then ActiveSheet.CheckBoxes("チェック 8").Value = xlOn End If End Sub

しかしこの2つ目のマクロが全く動いていないようです。
どうしたらうまくいくでしょうか。

また、2つ目のマクロを以下のように修正しても何の反応もありませんでした。
これは「チェック 8」という名前のチェックボックスを右クリック→「マクロの登録」から標準モジュールのVBA編集画面を開いて作成しました。

Sub チェック8_Click() If ActiveSheet.CheckBoxes("チェック 7").Value = xlOn Then ActiveSheet.CheckBoxes("チェック 8").Value = xlOn End If End Sub

###やりたいこと
①チェックボックスは少なくとも全部で4つ(チェックボックス1,2,7,8)あり、チェックボックス1と2が両方ともチェックが入ったときにのみチェックボックス7に自動的にチェックが入る(実現済み)

②上記①でチェックボックス7にチェックが入ったことにより、自動的にチェックボックス8にチェックが入る

実際は②でチェックボックス7にマクロによって自動的にチェックが入ったときに、それを検知してチェックボックスへのチェックのほかにもいろいろな何らかの特定の処理が行えるようにしたいですが、マクロでチェックが入った場合は通常のSub チェック8_Click()・・では検知できないようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/05/29 00:36

test2を呼び出しているところがなさそうですが。
sinzou

2020/05/30 05:56

①の判定でチェックボックス7とチェックボックス8両方チェック入れる? てことですか。
guest

回答1

0

んと、いろいろ知っておく必要があることがありますが、
やりたいことから離れてしまうので混乱を避けるため、要点のみ。

フォームコントトールのチェックボックスをクリックした時にマクロを起動したいなら、

1)フォームコントロールは図形の一種と考える
2)図形と同じで、標準モジュールに書かれたマクロを登録する
3)クリックされた図形の名前はApplication.Caller プロパティで取得する

ということになります。

で、やりたいことは、
「チェックボックス 1」クリックでマクロが起動されたときに、
「チェックボックス 1」がOnの状態になっていたら、
「チェックボックス 2」と「チェックボックス 3」を選択可能なオフの状態にする。
そうでなければ、淡色表示の状態にする
「チェックボックス 7」クリックでマクロが起動されたときに、
「チェックボックス 7」がOnの状態なら、
「チェックボックス 8」をOffの状態にする。
そうでなければ淡色表示にする。

という事でしょうか?
上記をVBAに翻訳するとだいたい以下のようになります。

ExcelVBA

1Option Explicit 2 3Sub チェックボックス_テスト() 4 Dim sBoxName As String 5 Dim flg As Long 6 7 'マクロを呼び出した図形の名前を取得 8 sBoxName = Application.Caller 9 10 With ActiveSheet.CheckBoxes 11 Select Case sBoxName 12 Case "Check Box 1", "Check Box 7" 13 flg = IIf(.Item(sBoxName).Value = xlOn, xlOff, xlMixed) 14 If sBoxName = "Check Box 1" Then 15 .Item("Check Box 2").Value = flg 16 .Item("Check Box 3").Value = flg 17 Else 18 .Item("Check Box 8").Value = flg 19 End If 20 End Select 21 End With 22End Sub

投稿2020/05/29 01:03

mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gunma_user

2020/05/29 08:31

「Microsoft Excel Objects」ではなく標準モジュールに書くんですね。 説明がわかりにくくてすみませんでした。 実現したいことを追記させていただきましたので改めてご確認願えますでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問