2012-01-19 3 views
6

Tôi đã thêm một ListBox vào một SHEET (không phải là một "UserForm") Tôi đã làm điều này bằng cách sử dụng chuột. Tôi nhấp vào biểu tượng Búa và Cờ lê nhỏ.Làm cách nào để tôi tham chiếu đến đối tượng điều khiển, trên trang tính, sử dụng tên biến?

ListBox này dường như dễ dàng tham chiếu sử dụng mã như thế này:

ListBox1.Clear 

hoặc

ListBox1.AddItem("An option") 

Tuy nhiên, tôi có ba trong số những listboxes (tên, thuận tiện, ListBox1, ListBox2, và ListBox3) và tôi muốn viết một hàm để điền chúng với dữ liệu mảng, như sau:

Call populate_listbox(ListBox2, designAreaArray) 

Trong trường hợp đối số đầu tiên là tên hộp danh sách, thứ hai là dữ liệu.

Nhưng tôi không biết cách gửi "ListBox2" chính xác hoặc tham khảo chính xác trong hàm.

Ví dụ:

Dim controlName as string 
controlName = "ListBox1" 

không hoạt động, ngay cả khi tôi xác định các chức năng như sau:

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 

Rõ ràng nó kết quả trong một lỗi kiểu dữ liệu mis-phù hợp. Tôi đã cố gắng xác định "controlName" như một ListBox, nhưng điều đó đã không làm việc ...

Mặc dù có lẽ nó là tài liệu tham khảo của tôi vào listBox không chính xác. Tôi đã nhìn thấy rất nhiều cách để tham chiếu đến một đối tượng điều khiển ...

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

Danh sách này tiếp tục và không có tác dụng đối với tôi.

Trả lời

6

Hãy thử điều này:

Dim cMyListbox As MSForms.ListBox 

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

cMyListbox.AddItem("An option") 

Ngoài ra bạn có thể cư một ListBox mà không cần phải lặp qua mảng, hãy thử này:

Dim cMyListbox As MSForms.ListBox 
Dim vArray As Variant 

Set cMyListbox = Sheet1.ListBox1 

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

Cảm ơn bạn. Tôi sửa đổi phụ của tôi cho mỗi câu trả lời của justnS, và thiết lập biến của tôi (cMyListbox) như bạn đã chỉ ra ở trên, và sự kết hợp đã làm việc. Cảm ơn bạn đã tip về điền vào danh sách, cũng có. – Symmitchry

+0

Không có prob, vui vì nó đã làm việc cho bạn. – Reafidy

3

Thay đổi chữ ký phụ để phù hợp với điều này:

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

Bây giờ bạn có thể truyền nó như bạn đã tryi ng ban đầu.

LƯU Ý: Điều này chỉ hoạt động nếu bạn đã sử dụng phiên bản "ActiveX" của hộp danh sách. Tôi giả định bạn là bởi vì bạn có thể gọi ListBox1 trực tiếp từ một mô-đun.

PS: Điều khiển ActiveX là thành viên tắt của đối tượng trang tính gốc. Vì vậy, nếu bạn có listbox1 trên sheet1, bạn cũng có thể gọi nó là Sheet1.ListBox1 để bạn không bị nhầm lẫn nếu bạn kết thúc với nhiều trang tính với nhiều hộp danh sách. Ngoài ra, bạn có thể muốn thay đổi tên chỉ để giúp bạn dễ dàng hơn.

+0

Cảm ơn bạn đã phản hồi. Tôi sửa đổi khai báo biến của tôi cho mỗi câu trả lời của Reafidy, và sửa đổi phụ của tôi theo của bạn, và nó hoạt động ngay bây giờ. – Symmitchry