我がまちの「給食」自慢を聞かせてっ!

例えば、コンボボックスでオブジェクト名が「コンボ1」「コンボ2」「コンボ3」の3つがあったとします。
全てのコンボボックスに「10」「45」「92」のリストを入れたいとき、

With コンボ1
.Additem 10
.Additem 45
.Additem 92
End With

というように「コンボ2」「コンボ3」も同じようにコードを書いてるのですが、コードを少なくする方法を教えてください。

もう一つ、オブジェクト名に「(*)」(*は数字)を含んだ名前を作ることがなぜできないのでしょうか?

回答よろしくお願いします。

A 回答 (3件)

>#1補足


>「v」は配列なので「Additem」は使えない

配列なので使えないというより、ComboBoxへのデータセット手段として
・AddItem メソッド
・List プロパティ
・RowSource プロパティ
があり、
1次元配列を準備してList プロパティを使えば1行ですよ、
その1次元配列もArray関数を使えば1行ですよ、...という話です。
合わせて、
Dim i As Long
For i = 1 To 3
  Me.Controls("combobox" & i).List = Array(10, 45, 92)
Next i
も可ですが、同じ関数を3回繰り返したくなかっただけです。
(コード少量化=効率化...とは限らないと思いますので)



>データ型を宣言するときに「Variant」以外はできない

Array 関数が返す型がVariant型配列なので、その通りだと思います。
別に、
Dim v(2) As Long
v(0) = 10
v(1) = 45
v(2) = 92
としてもできますが、だったら、記述的にはAdditemでも良いわけです。
    • good
    • 0
この回答へのお礼

>1次元配列を準備してList プロパティを使えば1行ですよ、
その1次元配列もArray関数を使えば1行ですよ、...という話です。

なるほど。よく分かりました。

ありがとうございました。

お礼日時:2007/12/08 17:02

ワークシートに値のリストを作成してRowSourceプロパティで設定する


とか
sub setx(obj as combobox)
with obj
end with
end sub
みたいにコンボボックスを引数にとる関数・プロシジャを使って設定する

()が駄目なのは、配列と区別できなくなるからでしょう?
多分
    • good
    • 0
この回答へのお礼

今回は、ワークシートにリストを作ってコンボボックスに追加するなどの方法は考えていませんでしたが、そういう方法もあるんですね。

ありがとうございました。

お礼日時:2007/12/08 13:49

こんにちは。



Dim i As Long
Dim v

v = Array(10, 45, 92)
For i = 1 To 3
  Me.Controls("コンボ" & i).List = v
Next i

こんな感じで、Control名 & x でLoopさせれば良いです。
ですのでControlはデフォルトか、連番で名前付けしておくと楽ですね。

>「(*)」(*は数字)を含んだ名前
については詳しくないのでうまく説明できないですが、他にも1文字目は数値不可とか、
メタキャラクタ(?)な文字は使えないとか、制限があるのではないでしょうか。

またComboBox名は実際も"コンボ"ですか?
「Visual Basic でプロジェクト名に日本語の文字を使用できない」
http://support.microsoft.com/kb/418924/ja
『予期しない動作をすることがあります』との記事もありますので、留意されたほうが良いかと。

この回答への補足

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

なるほど。コントロールを連番にして、プログラムではリストに追加したい配列を作ってコントロールの数だけリストを追加していくわけですね。

「v」は配列なので「Additem」は使えないのは分かりましたが、「v」に代入されるのは数値(正確には数値の配列)ですが、データ型を宣言するときに「Variant」以外はできないということですか?これもやはり、配列だからでしょうか?

「()」は名前を付けるときに制限があるんですね。

コントロールなどの名前に日本語を使わない方がいいんですね。今までは、なんとなく日本語の方が分かりやすいので使っていました。
これから気をつけたいと思います。

大変申し訳ありませんがもう一度回答よろしくお願いします。

補足日時:2007/12/08 13:28
    • good
    • 0

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


おすすめ情報