オブジェクト名を変数で表現するには

解決


SK  2005-01-21 10:33:33  No: 119079  IP: [192.*.*.*]

コンボボックス(名前はcmb)で
cmb.AddItem "月曜"の部分のcmbをString変数で表現したいのですが

Dim A as String
A=cmb
A.AddItem "月曜"
と書くとやはりエラーになります。
方法をお分かりの方いましたらよろしくお願いします。一応過去ログも検索してみたのですがかぶっていたらすみません。

編集 削除
特攻隊長まるるう  2005-01-21 12:08:05  No: 119080  IP: [192.*.*.*]

質問タイトルの通り
>オブジェクト名を変数で表現するには
だと
   Dim A as String
   A = cmb.Name
でしょう?。

文字列から対応するコントロール見つけて
最終的に AddItem したいなら、とりあえず
過去ログ検索『Controls』で引っ掛かる情報に
一通り目を通してみて下さい。

編集 削除
SK  2005-01-21 12:16:44  No: 119081  IP: [192.*.*.*]

Controlsで検索すると過去ログがありました。
特攻体長まるるうさんどうもありがとうございました解決できました。

編集 削除
SK  2005-01-25 12:37:06  No: 119082  IP: [192.*.*.*]

先日過去ログを見て解決したと思ったのですが、また分からないところが出てきたので質問させてください。
過去ログをみると
Dim i As Integer
i = 1
Controls("Text"&i).Text=ok
と書いてあって自分も実際上記のコードを参考にして

Dim i As Integer
i=i
Controls("cmb"&i).AddItem "OK"

と書くと成功するのですが
cmbの部分を変数にして

Dim s As String i as Integer
s = cmb i = 1
Controls(s&i).AddItem "OK"

とするとエラーになります。どうにかcmbを変数にできる方法はないでしょうか?よろしくお願いします。

編集 削除
たけ  2005-01-25 12:48:01  No: 119083  IP: [192.*.*.*]

オブジェクト名は『cmb』じゃないんですか?
何故後ろにiを付ける必要があるんですか?
それにコードを載せるときは勝手な文法で書かずに
VBの規則に従った文法で書いてください
でないと分かって書いているのかどうかこちらでは判断できませんので

編集 削除
SK  2005-01-25 12:55:41  No: 119084  IP: [192.*.*.*]

Dim s As String i as Integer
s = cmb
i = 1
Controls(s&i).AddItem "OK"

VBの規則に沿った文法ってあるんですか?知りませんでしたすみません。
コンボボックスのオブジェクト名はcmb1でcmb1からcmb9まで作りたい場合どうしたらいいかという質問です。よろしくお願いします。

編集 削除
LESIA  2005-01-25 13:21:06  No: 119085  IP: [192.*.*.*]

VBの規則に沿った文法じゃないと、構文エラーになりますよ。
知らないでVBでプログラムは作れません。
誤) Dim s As String i as Integer
正) Dim s As String, i as Integer

cmb1からcmb9まで作りたいなら
iを1から9までループされればいいのでは?

編集 削除
魔界の仮面弁士  2005-01-25 13:23:36  No: 119086  IP: [192.*.*.*]

> VBの規則に沿った文法ってあるんですか?
少なくとも、
  Dim s As String i as Integer
が、VBの規則外(文法エラー)であるという事はわかりますよね?

> コンボボックスのオブジェクト名はcmb1で
「cmb1.AddItem "OK"」に相当するコードなら、
「Controls("cmb1").AddItem "OK"」で良いかと。

ループで1〜9まで作るなら、
   For I = 1 To 9
       Controls("cmd" & CStr(I)).AddItem "OK"
   Next
という感じですね。

# でも、こういう時は「コントロール配列」を使った方が楽かも。

編集 削除
だからぁ  2005-01-25 13:25:50  No: 119087  IP: [192.*.*.*]

そもそもコントロールの番号を変数で指定するということならコントロール配列にする事をお勧めします(VB.netではそうもいきませんが)

編集 削除
SK  2005-01-25 13:36:37  No: 119088  IP: [192.*.*.*]

みなさんどうもレスありがとうございます。
オブジェクトの名前に関してですがcmbA,cmbB,cmbC,cmbDのようにあってそれを9つずつ作りたいのです。
>LESIAさん
初歩的な間違いですみません。質問する前にコンパイルするなどして気をつけます。
>  魔界の仮面弁士さん
cmdの部分を変数にできる方法を知ってたら教えてくださいお願いします。
>だからぁさん
コントロール配列を作る方法って難しいですか?

編集 削除
魔界の仮面弁士  2005-01-25 14:47:56  No: 119089  IP: [192.*.*.*]

> cmdの部分を変数にできる方法を知ってたら教えてくださいお願いします。
ありゃま。変数の使い方から始まっちゃうのですか。(^^;
とりあえず、こんな感じですかね。"cmb" を 変数 S に入れています。

Dim S As String
Dim I As Integer
S = "cmb"
For I = 1 To 9
   Controls(S & CStr(I)).AddItem "OK"
Next



> コントロール配列を作る方法って難しいですか?
お使いの環境は何ですか?
VB6等であれば、コントロール配列を作れますが、
Access VBA等だと使えません。

VB6等の場合は、複数のComboBoxに、それぞれ同じ名前をつけてみてください。(たとえば、"cmb" など)
そうすると、Indexプロパティに数値が入り、「コントロール配列」に変化します。

たとえば今までは
   cmb1.AddItem "OK"
   cmb2.AddItem "OK"
   cmb3.AddItem "OK"
のように書いていたコードが、
   Dim I As Integer
   For I = 0 To 2
      cmb(I).AddItem "OK"
   Next
ですとか、あるいは、
   Dim Combo As Combobox
   For Each Combo In cmb
      Combo.AddItem "OK"
   Next
などのように書く事ができます。(詳細はヘルプで確認してください)


なお、上記のコントロール配列と、先のControls()を使った名前指定を
組み合わせて使う事もできます。
   For I = 0 To 2
      Controls("Cmb")(I).AddItem "OK"
   Next

編集 削除
SK  2005-01-25 17:48:30  No: 119090  IP: [192.*.*.*]

>魔界の仮面弁士さん
親切にどうもありがとうございました。おかげさまで無事変数を使ってプログラムを完成させる事ができました。他のみなさまもどうもありがとうございました。

編集 削除