2012-01-19 19 views
6

ListBox'ı bir SHEET'e ("UserForm" değil) ekledim Bunu, fareyi kullanarak yaptım. Küçük Çekiç ve İngiliz anahtarı simgesini tıklattım.Bir kontrol nesnesine, çalışma sayfasındaki değişken adını kullanarak nasıl başvurabilirim?

ListBox1.Clear 

veya

Ancak
ListBox1.AddItem("An option") 

, ben bu ListBoxes üç (adlandırılmış, elverişli ListBox1, ListBox2 ve:

Bu liste kutusu kolayca bu gibi kod kullanarak başvurulan gibi görünüyor ListBox3) ve bunları dizi verileriyle doldurmak için bir işlev yazmak istiyorum:

İlk argüman liste kutusu ismidir, 2. veridir.

Ancak "ListBox2" yi doğru şekilde nasıl gönderileceğini bilmiyorum ya da işlev içinde doğru şekilde nasıl başvuracağımı bilmiyorum. Örneğin

:

Dim controlName as string 
controlName = "ListBox1" 

aşağıdaki gibi işlev tanımlamak bile çalışmaz:

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 

Açıkça bir yanlış eşleşen veri tipi hata ile sonuçlanır. ListBox olarak "controlName" tanımlamayı denedim, ancak bu da çalışmadı ...

Belki de bu benim listeBox yanlıştır. Ben

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

liste

bir gider ... bir kontrol nesnesine başvurmak için bir çok yol gördüm ve hiçbir şey benim için çalıştı.

cevap

6

bu deneyin: Ayrıca

Dim cMyListbox As MSForms.ListBox 

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

cMyListbox.AddItem("An option") 

Eğer bir liste doldurabilirsiniz diziye döngü kalmadan, bu deneyin:

Dim cMyListbox As MSForms.ListBox 
Dim vArray As Variant 

Set cMyListbox = Sheet1.ListBox1 

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

Teşekkür ederiz. JustnS'nin cevabı için altımı değiştirdim ve yukarıda belirttiğim gibi değişkenimi (cMyListbox) ayarladım ve kombinasyon çalıştım. Ayrıca listeyi doldurma ile ilgili ipucu için teşekkürler. – Symmitchry

+0

Hiçbir prob, sizin için çalıştığı memnun değil. – Reafidy

3

değiştirin alt imzayı bu maç için:

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

Şimdi siz tryi gibi geçebilirsiniz. orijinal olarak ng.

NOT NOT: Bu, yalnızca liste kutusunun "ActiveX" sürümünü kullandıysanız çalışır. Varsayalım çünkü bir modülden doğrudan ListBox1'i arayabiliyorsunuz.

Not: ActiveX denetimleri, üst sayfa nesnesinin üyeleridir. Bu yüzden, eğer sheet1 üzerinde listbox1 varsa, Sheet1.ListBox1 gibi de arayabilirsiniz, böylece birden fazla listeyle birden çok sayfa halinde sonuçlanırsa kafanız karışmaz. Ayrıca, sadece kendiniz için daha kolay hale getirmek adına ismi değiştirmek isteyebilirsiniz.

+0

Yanıt için teşekkürler. Reafidy'in cevabı için değişken bildirimi değiştirdim ve altımı sizinkilere göre değiştirdim ve şimdi çalışıyor. – Symmitchry

İlgili konular