- ベストアンサー
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
CheckBoxが CheckBox1,CheckBox2,…6 まであり、 If CheckBox1.Value = True Then… とするときに、数字「1」の部分を変数にしたいのですが、どのようにすれば可能でしょうか。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> ・ワークシート上のもの(ツールバー[コントロール ツールボックス]から) > になります。 #3-4 は Userform の CheckBox に対する回答です。[コントロール ツールボックス] だったのですね。 今回は For でループさせてませんが、必要なら今までの回答を応用して下さい。 i = 1 ' Cstr 関数は数値を文字列に変換する sCtrlName = "CheckBox" & CStr(i) ' シートモジュールでの Me はワークシート自信を指す If Me.OLEObjects(sCtrlName).Object.Value = True Then MsgBox sCtrlName & "の状態は True です" Else MsgBox sCtrlName & "の状態は False です" End If やってみてよく分からなければ、補足して下さい。
その他の回答 (5)
- KenKen_SP
- ベストアンサー率62% (785/1258)
ごめんなさい。最初に確認しておけば良かったのですが.... > エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか? この CheckBox とは ・Userform 上のもの ・ワークシート上のもの(ツールバー[フォーム]から) --->Shape ・ワークシート上のもの(ツールバー[コントロール ツールボックス]から) --->OLEObject のどれですか?
補足
・ワークシート上のもの(ツールバー[コントロール ツールボックス]から) になります。 知識不足ゆえ、他の2つは知りませんでした。 こちらこそ申し訳ありません。 お手数おかけします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
ここでの Me は Userform 自身のことです。省略できますけどね。 > エラーになってしまいました。 そのまま貼り付けてもダメですよ。CheckBox コントロールにはプロパティー ウインドウで「オブジェクト名」=「コントロール名」が付いています。 それに合わせないと。 Controls([コントロール名文字列]) でコントロールを指定できるのです。 調べたい CheckBox のコントロール名が仮に CheckBox1 ~ CheckBox6 だとしたら、For ループで数字の部分だけを補完してコントロール名の文字列 を生成します。 > Me.Controls("CheckBox" & Cstr(i)).Value '<-- ココ i = 1 のとき、 "CheckBox" & Cstr(i) で文字列が連結されて、CheckBox1 という文字列になるのはわかりますね? ここで生成したコントロール名がフォーム上で見つからないと、 >「コンパイルエラー:メソッドまたはデータメンバーが見つかりません。」 のエラーになります。
補足
編集中のCheckBoxが、プロパティーウインドウで 「(オブジェクト名)」=「CheckBox1」~「CheckBox6」 となっていることを確認しました。 >i = 1 のとき、 "CheckBox" & Cstr(i) で文字列が連結されて >CheckBox1という文字列になる 理解できました。 しかし、依然 「コンパイルエラー:メソッドまたはデータメンバーが見つかりません。」 となってしまいます。 また、「Me.」を省略すると 「コンパイルエラー:SubまたはFunctionが定義されていません。」 となってしまいました。 もしよろしければ回答お願いいたします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんばんは。 For i = 1 To 6 If Me.Controls("CheckBox" & Cstr(i)).Value = True Then ~ End If Next でできない? でも6個ぐらいなら次の書き方の方がわかり易いとおもうけど。 Select Case True Case CheckBox1.Value ' CheckBox1 が True の時の処理 Case CheckBox2.Value ' CheckBox2 が True の時の処理 ... 後は省略 End Select
補足
回答ありがとうございます。 早速試してみましたが、 「コンパイルエラー: メソッドまたはデータメンバーが見つかりません。」 とエラーになってしまいました。 「Me.Controls().」は初めて知りました。 よくわからないので、調べてみます。
- mshr1962
- ベストアンサー率39% (7417/18945)
ループで処理するのならこちらが参考になりませんか? http://www.officetanaka.net/excel/vba/tips/tips44.htm
補足
回答ありがとうございます。 参考ページの内容が知らないことばかりで、まだ理解できてないです。 「Controlsコレクション」というのが、キーワードとなりそうなので、調べてみます。
- himajin100000
- ベストアンサー率54% (1660/3060)
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには http://oshiete1.goo.ne.jp/qa2313294.html 実際できるかは実験していないので不明
補足
回答ありがとうございます。 「Forms」メソッドというのが、よくわからないので調べてみます。
お礼
やりたいことができるようになりました。 >' シートモジュールでの Me はワークシート自信を指す このヒントのおかげで、標準モジュールに移動したときも動作させることができました。 非常に助かりました。 ありがとうございました。