Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13442 / 13646 ツリー ←次へ | 前へ→

【5395】オブジェクトの配列化について せいろく 03/5/9(金) 19:57 質問
【5396】Re:オブジェクトの配列化について りん 03/5/9(金) 22:04 発言
【5399】Re:オブジェクトの配列化について 谷孝一 03/5/10(土) 0:56 回答
【5400】Re:オブジェクトの配列化について Kein 03/5/10(土) 3:23 回答
【5401】Re:オブジェクトの配列化について Kein 03/5/10(土) 3:26 発言

【5395】オブジェクトの配列化について
質問  せいろく  - 03/5/9(金) 19:57 -

引用なし
パスワード
   VBAで、ComboBox等のオブジェクトの配列化はできないのでしょうか?
VBだと、オブジェクトのプロパティにINDEXという項目があって、そこに
数字を入れれば配列化できるのですが、VBAのオブジェクトのプロパティには、
INDEXの項目がありません。
何かいい方法をご存知の方は教えて下さい。

【5396】Re:オブジェクトの配列化について
発言  りん E-MAIL  - 03/5/9(金) 22:04 -

引用なし
パスワード
   せいろく さん、こんばんわ。

>VBAで、ComboBox等のオブジェクトの配列化はできないのでしょうか?

[FormObject].Controls()または[SheetObject].OLEObjects()で取得するのではダメですか?

使用例は
最近のなら
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=4909;id=excel

クラスも考慮にいれるなら
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=4844;id=excel

「コントロール配列」の検索結果
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=4193;id=excel

こんな感じです。

 私はDelphiのイベントを共有してTAGで分岐するという方法が気に入っているのですけど(VBはよくわからない)、VBAでもできたらいいのになあといつも思います。
 コマンドバーではできるのですがフォームやシートでは簡単には無理なようで。

【5399】Re:オブジェクトの配列化について
回答  谷孝一 E-MAILWEB  - 03/5/10(土) 0:56 -

引用なし
パスワード
   Dim ComboBox(10) As Object

Private Sub UserForm_Initialize()
  Dim I As Long
  For I = 1 To 10
    Set ComboBox(I) = Controls("ComboBox" & I)
   Next I
End Sub

これでComboBox1〜ComboBox10を
ComboBox(1)〜ComboBox(10)に変換します。 

【5400】Re:オブジェクトの配列化について
回答  Kein  - 03/5/10(土) 3:23 -

引用なし
パスワード
   >ComboBox等のオブジェクト
別に、ActiveXコントロールに、限定してるわけでは無いですね ?
それならフォームのComboBoxで、Indexが使えますよ。
書き方としては・・

ActiveSheet.ComboBoxes.Add Left, Top, Width, Height

ですが、これをTopの値を大きくしながら、何回かループして複数配置してみて下さい。

MsgBox ActiveSheet.ComboBoxes(2).Name

で、2回目に追加されたComboBoxの名前が、表示できると思います。
なお、フォームを使っている場合だけ、Callerプロパティで各コントロールの固有名
を取得できますので、OnActionで全て同じマクロを登録し・・

Dim x As Variant
x = Application.Caller
If VarType(x) <> 8 Then Exit Sub
Select Case x
  Case "COMBOBOX 1"

  Case "COMBOBOX 2"


などとすることで、クリックされたボックスを条件分岐して、別のコードを
走らせることが出来ます。これにより、1つずつの Clickイベントマクロを書く
手間が省けます。Excel5.0の時代からあるやり方ですが、ActiveXより動作が
安定しているようなので、Excel2000でもこちらを使っていますが・・。

【5401】Re:オブジェクトの配列化について
発言  Kein  - 03/5/10(土) 3:26 -

引用なし
パスワード
   >フォームのComboBox
あ、コントロールツールボックスの ComboBox に相当する、フォームのオブジェクトは

DropDown

になります。なので・・

ActiveSheet.DropDowns.Add

ActiveSheet.DropDowns(2)

などとして下さい。ども。

13442 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free