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

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

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

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

Q&A

解決済

3回答

11005閲覧

ExcelVBAでシート上のチェックボックスにチェックが入っているかどうかを判断するコードを入れたいがエラーが出る

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

0グッド

1クリップ

投稿2020/03/18 04:23

編集2020/03/18 05:47

いつもお世話になっております。
これはもしかしたら皆さんにとっては「すごーく簡単なこと」かもしれませんが、
色々と試行錯誤してもうまくいかないので聞いて見ました。
よろしくお願いいたします。

困っていること

シート上のチェックボックスにチェックが入っているかどうかを判断したいが、
VBAで動かすとエラーが出る
イメージ説明
例えば丸で囲っているチェックボックス(フォームコントロールチェックボックスです)の
チェックボックスの値は「Chk_1」です。
この値を取得するため、コードではこのように書きました。

VBA

1Private Function chkbox_chk(ByVal wbactive As Workbook) 2Dim cnt As Integer 3 4 Debug.Print wbactive.Worksheets("Main").CheckBoxes(Chk_1).Value 5    Debug.Print wbactive.Worksheets("Main").CheckBoxes(Chk_2).Value 6    Debug.Print wbactive.Worksheets("Main").CheckBoxes(Chk_3).Value 7    Debug.Print wbactive.Worksheets("Main").CheckBoxes(Chk_4).Value 8    Debug.Print wbactive.Worksheets("Main").CheckBoxes(Chk_5).Value 9 10End Function

こうやって、チェックボックスの値がちゃんと取得されているかを
debug.print出力しながら確認したいのです。

でも、ここでエラーが出てしまいます。
イメージ説明

それで、書き方がいけないのかなと思い、
例えばCheckboxs(1)に変えたりしてみたのですが、どれもダメでした。

ちなみに、wbActiveは

Set wbactive = ThisWorkbook wbactive.Worksheets(”Main").Activate

というふうにして取得しています。

なので、wbactiveがちゃんと引き継がれていないのかな?と思って、試しに
チェックボックスの数を調べるコードを入れてみましたが、そちらはちゃんと取れていました。
また、E4セルに「ああああ」と入力し、それを取得するコードを入れてもちゃんと取得できました。
なので、wbActiveが引き継がれていないわけではなさそうです。

また、今回の件がきっかけで色々と調べたのですが、
チェックボックスにはフォームコントロールとActiveXコントロールがあり
それぞれ書き方が違う・・とのことでしたので、それも頭に入れて色々と調べてみたのですが、
どの書き方もエラーが出てしまうので、もしかしたら他のところで原因があるのかな?と
考えています。

よろしくお願いいたします。

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

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

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

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

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

hatena19

2020/03/18 04:29

Function のコードは画像ではなくマークダウンのコードブロック内に記述してください。
退会済みユーザー

退会済みユーザー

2020/03/18 04:39

すみません、書き直しました。 よろしくお願いいたします。
guest

回答3

0

Chk_1は名称なので、CheckBoxesコレクションの要素を指定するときは文字列である必要があると思います。

VBA

1Debug.Print wbactive.Worksheets("Main").CheckBoxes("Chk_1").Value

投稿2020/03/18 04:59

sazi

総合スコア25300

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

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

退会済みユーザー

退会済みユーザー

2020/03/18 05:46 編集

すみません、それでやってみたのですが、それでもエラーが起きます。 エラーの内容は上記と同じく、です。 wbactiveがちゃんと引き継がれていないのかな?と思って、試しに チェックボックスの数を調べるコードを入れてみましたが、そちらはちゃんと取れていました。 また、E4セルに「ああああ」と入力し、それを取得するコードを入れてもちゃんと取得できました。 なので、wbActiveが引き継がれていないわけではなさそうです。
sazi

2020/03/18 06:11 編集

Debug.Print wbactive.Worksheets("Main").CheckBoxes(1).Value とした場合にも同様のエラーになりますか? エラーにならないなら、チェックボックスの名前を確認してみてください。
退会済みユーザー

退会済みユーザー

2020/03/18 06:39

はい、それでもエラーになります。 先ほど、1回正常に動きました。(コードは変えていない) でも2回目やると、また同じエラーが起こりました。 一体何なのでしょう・・・。
guest

0

ベストアンサー

全くよく分からないのですが、こういう現象が発見できました。

①1回目→ちゃんと動く
②2回目→エラーが起こる

VBA

1wbactive.Worksheets("Main").CheckBoxes(Chk_1).Value

③Excelシート上でチェックボックスの名前をコピーして上記コードに貼り付け
④3回目、もう一度動かすとちゃんと動く
⑤4回目、またエラーが起こる
⑥・・・の繰り返しです。

何がおかしいのか分かりませんが、今回は私個人の勉強として作ったものなので
今回はこれにて閉めたいと思います。
また何か分かりましたらお知らせしたいと思います。

投稿2020/03/19 06:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Checkboxの綴りあっていますかね?

エラーが出ているものは「Checkboxs」と書かれていますが他は「Checkboxes」と書かれている気がします!

投稿2020/03/18 04:28

編集2020/03/18 04:30
Nash-BETA

総合スコア233

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

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

退会済みユーザー

退会済みユーザー

2020/03/18 04:39

すみません、先ほど確認し、修正させていただきました。 するとまた別のエラーが出てきたので、そのエラー画像も差し替えておきました。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問