2012-01-19 11 views
6

He agregado un ListBox a una HOJA (no a un "UserForm") Hice esto con el mouse. Hice clic en el pequeño icono de Martillo y llave inglesa.¿Cómo me refiero a un objeto de controles, en una hoja de trabajo, usando un nombre de variable?

Este ListBox parece estar referenciada fácilmente usando código como este:

ListBox1.Clear 

o

ListBox1.AddItem("An option") 

Sin embargo, tengo tres de estos ListBoxes (llamado, convenientemente, ListBox1, ListBox2, y ListBox3) y quiero escribir una función para rellenarlos con datos de matriz, como este:

Call populate_listbox(ListBox2, designAreaArray) 

Donde el primer argumento es el nombre de la lista, el 2º es la información.

Pero no sé cómo enviar "ListBox2" correctamente, o consultarlo correctamente dentro de la función.

Por ejemplo:

Dim controlName as string 
controlName = "ListBox1" 

no funciona, incluso si defino la función como sigue:

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 

claro que resulta en un error de tipo de datos mis-emparejado. Intenté definir "controlName" como ListBox, pero tampoco funcionó ...

Aunque quizás sea mi referencia a listBox incorrecta. He visto maneras tantos para hacer referencia a un objeto de control ...

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

la lista sigue en una, y nada ha funcionado para mí.

Respuesta

6

Prueba esto:

Dim cMyListbox As MSForms.ListBox 

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

cMyListbox.AddItem("An option") 

También puede rellenar un cuadro de lista sin tener que recorrer la matriz, intente esto:

Dim cMyListbox As MSForms.ListBox 
Dim vArray As Variant 

Set cMyListbox = Sheet1.ListBox1 

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

Gracias. Modifiqué mi sub respuesta por justnS, y configuré mi variable (cMyListbox) como indicaste arriba, y la combinación funcionó. Gracias por la sugerencia sobre el llenado de la lista, también. – Symmitchry

+0

No hay problema, me alegro de que funcionó para usted. – Reafidy

3

cambiar la firma sub para que coincida con esto:

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

Ahora puede pasarlo como si fuera tryi ng a originalmente.

NOTA: Esto solo funciona si utilizó la versión "ActiveX" del cuadro de lista. Supongo que lo es porque puede llamar a ListBox1 directamente desde un módulo.

PD: Los controles ActiveX son miembros fuera del objeto de la hoja padre. Entonces, si tiene el listbox1 en la hoja 1, también puede llamarlo como Sheet1.ListBox1 para no confundirse si termina con varias hojas con múltiples listboxes. Además, es posible que desee cambiar el nombre solo para que sea más fácil para usted.

+0

Gracias por la respuesta. Modifiqué mi declaración de variable según la respuesta de Reafidy, y modifiqué mi sub de acuerdo con la tuya, y funciona ahora. – Symmitchry

Cuestiones relacionadas