• ベストアンサー

エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?

CheckBoxが CheckBox1,CheckBox2,…6 まであり、 If CheckBox1.Value = True Then… とするときに、数字「1」の部分を変数にしたいのですが、どのようにすれば可能でしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.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 やってみてよく分からなければ、補足して下さい。

Sakana-Ya
質問者

お礼

やりたいことができるようになりました。 >' シートモジュールでの Me はワークシート自信を指す このヒントのおかげで、標準モジュールに移動したときも動作させることができました。 非常に助かりました。 ありがとうございました。

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

ごめんなさい。最初に確認しておけば良かったのですが.... > エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか? この CheckBox とは  ・Userform 上のもの  ・ワークシート上のもの(ツールバー[フォーム]から)   --->Shape  ・ワークシート上のもの(ツールバー[コントロール ツールボックス]から)   --->OLEObject のどれですか?

Sakana-Ya
質問者

補足

・ワークシート上のもの(ツールバー[コントロール ツールボックス]から) になります。 知識不足ゆえ、他の2つは知りませんでした。 こちらこそ申し訳ありません。 お手数おかけします。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

ここでの Me は Userform 自身のことです。省略できますけどね。 > エラーになってしまいました。 そのまま貼り付けてもダメですよ。CheckBox コントロールにはプロパティー ウインドウで「オブジェクト名」=「コントロール名」が付いています。 それに合わせないと。 Controls([コントロール名文字列]) でコントロールを指定できるのです。 調べたい CheckBox のコントロール名が仮に CheckBox1 ~ CheckBox6 だとしたら、For ループで数字の部分だけを補完してコントロール名の文字列 を生成します。 > Me.Controls("CheckBox" & Cstr(i)).Value '<-- ココ i = 1 のとき、 "CheckBox" & Cstr(i) で文字列が連結されて、CheckBox1 という文字列になるのはわかりますね? ここで生成したコントロール名がフォーム上で見つからないと、 >「コンパイルエラー:メソッドまたはデータメンバーが見つかりません。」 のエラーになります。

Sakana-Ya
質問者

補足

編集中のCheckBoxが、プロパティーウインドウで 「(オブジェクト名)」=「CheckBox1」~「CheckBox6」 となっていることを確認しました。 >i = 1 のとき、 "CheckBox" & Cstr(i) で文字列が連結されて >CheckBox1という文字列になる 理解できました。 しかし、依然 「コンパイルエラー:メソッドまたはデータメンバーが見つかりません。」 となってしまいます。 また、「Me.」を省略すると 「コンパイルエラー:SubまたはFunctionが定義されていません。」 となってしまいました。 もしよろしければ回答お願いいたします。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんばんは。 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

Sakana-Ya
質問者

補足

回答ありがとうございます。 早速試してみましたが、 「コンパイルエラー: メソッドまたはデータメンバーが見つかりません。」 とエラーになってしまいました。 「Me.Controls().」は初めて知りました。 よくわからないので、調べてみます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

ループで処理するのならこちらが参考になりませんか? http://www.officetanaka.net/excel/vba/tips/tips44.htm

Sakana-Ya
質問者

補足

回答ありがとうございます。 参考ページの内容が知らないことばかりで、まだ理解できてないです。 「Controlsコレクション」というのが、キーワードとなりそうなので、調べてみます。

回答No.1

【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには http://oshiete1.goo.ne.jp/qa2313294.html 実際できるかは実験していないので不明

Sakana-Ya
質問者

補足

回答ありがとうございます。 「Forms」メソッドというのが、よくわからないので調べてみます。

関連するQ&A