Llenar varios combobox con los mismos elementos

Una mas y van... Esta es mi consulta. Existe algún código que me permita pasar de manera cíclica el contenido de un array de +/- 30 elementos (pueden irse incrementando con el tiempo) en unos 12 combos.

Intente algo asi pero ni...

Private Sub UserForm_Initialize()

'*Carga las materias en una matriz
Dim h, x, menor, mayor As Long
Dim num_mat(100) As String
h = 3
x = 1
With Worksheets("Materias") 'hoja donde se encuentra el listado de materias
Do While .Range("a" & h) <> ""
num_mat(x) = .Range("a" & h)
x = x + 1
h = h + 1
Loop
End With
menor = LBound(num_mat) 'menor valor de un array
mayor = UBound(num_mat) 'mayor valor de un array

'Los combos que contienen las materias se llaman; cmbMat1, cmbMat2, cmbMat3, y asi 'sucesivamente, 12 en total, por lo que se me ocurrió algo asi

For num_com = 1 To 12 'num_com haría referencia al numero de combobox

for a = 1 to mayor 'contador para el numero de materia en el array
frmCursos.cmbMat& num_com .AddItem num_mat(a)
next
next

Según parece, aquí no me sirve el atajo del &

1 respuesta

Respuesta
1

Te ajusto la parte del bucle donde x cada valor de la variable 'num_com' debe recorrer los controles hasta encontrar el que se llama cmbMat & num:com.

Una vez que lo encontró lo carga con el array y sale del For con Exit, repitiendo el bucle para el próximo valor de num_com

For num_com = 1 To 12 'num_com haría referencia al numero de combobox
For Each ct In Me.Controls
If ct.Name = "cmbMat" & num_com Then
For a = 1 To mayor 'contador para el numero de materia en el array
ct.AddItem num_mat(a)
Next
Exit For
End If
Next
Next

Gracias por tu pronta respuesta. Una consulta mas. El código funciona a la perfección inclusive estoy aprovechando para usar el mismo código al inicio del UserForm_Initialize() para que me limpie todos los combox antes de iniciar la carga.

Pero me quedo una duda, estos combox toman sus valores desde otra hoja a la cual acudo por otro formulario donde se editan las materias a cargar, cuando vuelvo de formulario en formulario a donde edito la conformación de cursos con sus 12 materias resulta que no aparecen la/s nueva/s materias que añadí allí en la hoja que contiene las materias, si lo ase cuando entro en una segunda o tercera ocasión en que reingreso al formulario de edición, pero esto es algo desprolijo. ¿me estará faltando alguna especie de "refresco", "actúalizacion" en la planilla?, en todo caso ¿como podría solucionarlo?

Otra consulta, ¿que otro manual de los que ofreces me sugieres para seguir avanzando en programación? ya tengo el "Manual Formularios en Excel".

Quedo a la espera, gracias

Lo que te conviene hacer es separar el proceso de carga de los combos en subrutina aparte, por ej:

sub CargaCombos()

'aquí todo el bucle

End Sub

Esta subrutina colocala dentro de las de este userform.

Luego en el evento Initialize y en el evento Activate del Userform la llamás con:

Call CargaCombos. Esta subrutina debe contener como 1ra instrucción la limpieza del combo para no 'acumular' datos: cmbMat1.clear , para lo cual también podés utilizar un bucle según el modelo anterior.

PD) Para estudiar y si estás trabajando con Excel 2007 o posterior te recomiendo el nuevo de Programación VBA (con el contenido actualizado de los 2 anteriores: Programación y 400Macros).

Para obtener ejemplos resueltos la opción es el de las 400Macros que aún es apto hasta el 2010, aunque muchas de las rutinas hoy ya no son necesarias considerando que Excel incorporó nuevas herramientas que resuelven lo que antes hacíamos con macros.

Contactame al correo para ampliar el tema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas