2012-01-19 3 views
6

リストボックスをシートに追加しました(「ユーザーフォーム」ではなく) マウスでこれを行いました。 小さなハンマーとレンチのアイコンをクリックしました。変数名を使用してワークシート上のコントロールオブジェクトを参照するにはどうすればよいですか?

このリストボックスは、簡単にこのようなコードを使用して参照しているように見える。しかし、私は便利、という名前のこれらのリストボックス(ListBox1を、ListBox2の3を持っている

ListBox1.Clear 

または

ListBox1.AddItem("An option") 

をし、 ListBox3)、このように配列データを設定する関数を作成したいとします。

Call populate_listbox(ListBox2, designAreaArray) 

最初の引数がリストボックス名で、2番目がデータです。

しかし、 "ListBox2"を正しく送信する方法、または関数内で正しく参照する方法がわかりません。

例えば:

Sub populate_listbox(LB As ListBox, dataArray As Variant) 
    Dim i As Integer: i = 0 
    For i = LBound(dataArray, 2) + 1 To UBound(dataArray, 2) ' Skip header row 
     LB.AddItem (dataArray(index, i)) 
    Next i 
End Sub 

を明らかにそれはミスマッチデータ型エラーをもたらす:

Dim controlName as string 
controlName = "ListBox1" 

は、以下のように、私は関数を定義する場合であっても、動作しません。私はListBoxとして "controlName"を定義しようとしましたが、どちらも動作しませんでした...

おそらくそれは間違っているリストボックスへの私の参照です。私はコントロールオブジェクトを参照するために多くの方法を見てきました...

MSForms.ListBox. 
ME.ListBox 
Forms.Controls. 
Worksheet.Shapes. 

リストはオンになり、何も私のために働いていません。

答えて

6

これを試してみてください:

Dim cMyListbox As MSForms.ListBox 

Set cMyListbox = Sheet1.ListBox1 '// OR Worksheets("YourSheetName").Listbox1 

cMyListbox.AddItem("An option") 

また、あなたはこの試みる、配列をループすることなく、リストボックスを移入することができます

:これに合わせて、サブ署名

Dim cMyListbox As MSForms.ListBox 
Dim vArray As Variant 

Set cMyListbox = Sheet1.ListBox1 

vArray = Range("A1:A6").Value 
cMyListbox.List = vArray 
+0

ありがとうございます。私はjustnSの答えごとに私のサブを変更し、上記のように私の変数(cMyListbox)を設定し、その組み合わせが働いた。ヒントを記入していただきありがとうございます。 – Symmitchry

+0

いいえ、それはあなたのために働いてうれしい。 – Reafidy

3

変更をSub populate_listbox(LB As MSForms.ListBox, dataArray As Variant)

あなたはtryiのように渡すことができますもともとは

:これは、リストボックスの「ActiveX」バージョンを使用した場合にのみ機能します。 ListBox1をモジュールから直接呼び出すことができるので、私はあなたがいると仮定しています。

PS:ActiveXコントロールは、親シートオブジェクトのメンバーではありません。したがって、sheet1にlistbox1がある場合は、Sheet1.ListBox1のように呼び出すこともできます。複数のリストボックスを持つ複数のシートになると混乱することはありません。また、自分で簡単に名前を変更することもできます。

+0

お返事ありがとうございます。私はReafidyの回答ごとに変数宣言を変更し、私のsubをあなたのものに合わせて修正しました。 – Symmitchry

関連する問題