プロが教えるわが家の防犯対策術!

CheckBoxが
CheckBox1,CheckBox2,…6
まであり、

If CheckBox1.Value = True Then…

とするときに、数字「1」の部分を変数にしたいのですが、どのようにすれば可能でしょうか。
よろしくお願いします。

A 回答 (6件)

【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには



http://oshiete1.goo.ne.jp/qa2313294.html

実際できるかは実験していないので不明

この回答への補足

回答ありがとうございます。

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

補足日時:2006/11/30 17:22
    • good
    • 0

ループで処理するのならこちらが参考になりませんか?


http://www.officetanaka.net/excel/vba/tips/tips4 …

この回答への補足

回答ありがとうございます。

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

補足日時:2006/11/30 17:20
    • good
    • 0

こんばんは。



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().」は初めて知りました。
よくわからないので、調べてみます。

補足日時:2006/11/30 17:10
    • good
    • 2

ここでの 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が定義されていません。」
となってしまいました。

もしよろしければ回答お願いいたします。

補足日時:2006/11/30 18:32
    • good
    • 0

ごめんなさい。

最初に確認しておけば良かったのですが....

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

この CheckBox とは

 ・Userform 上のもの
 ・ワークシート上のもの(ツールバー[フォーム]から)
  --->Shape
 ・ワークシート上のもの(ツールバー[コントロール ツールボックス]から)
  --->OLEObject

のどれですか?

この回答への補足

・ワークシート上のもの(ツールバー[コントロール ツールボックス]から)
になります。

知識不足ゆえ、他の2つは知りませんでした。
こちらこそ申し訳ありません。
お手数おかけします。

補足日時:2006/11/30 21:59
    • good
    • 0

> ・ワークシート上のもの(ツールバー[コントロール ツールボックス]から)


> になります。

#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

やってみてよく分からなければ、補足して下さい。
    • good
    • 4
この回答へのお礼

やりたいことができるようになりました。

>' シートモジュールでの Me はワークシート自信を指す
このヒントのおかげで、標準モジュールに移動したときも動作させることができました。

非常に助かりました。
ありがとうございました。

お礼日時:2006/12/01 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A