Filtrar lista de cuadro conbinado y mostrar varias columnas

20/09/2008 - 05:12 por GRIEGO59 | Informe spam
Hola!
En un formulario tengo un combobox1 con este código:

'Carga el combobox con los productos al activar el formulario
Private Sub UserForm_Activate()
Sheets("Códigos").Select
Range("a1").Select

Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
ComboBox1.AddItem ActiveCell
Loop
End Sub

La lista del cuadro combinado muestra la columna "a".
Los títulos de las columnas a, b y c son Código, producto, proveedor.

Quisiera que la lista del cuadro combinado muestre las columnas "a", "b" y
"c" de la hoja "códigos" y se seleccione la columna "a"

Quisiera, si es posible, que la lista del combobox1 muestre los productos
asociados al proveedor seleccionado en un combobox2.

Gracias por la ayuda,

Darío

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
20/09/2008 - 06:03 | Informe spam
hola, Darío !

__ 1 __
Mostrar la cita
__ 2 __
Mostrar la cita
1) la carga de un control combo/lista la puedes agilizar sin "danzas" seleccionando la siguiente fila/celda...
(incluso, te sugiero usar el evento '_initialize' en lugar del '_activate' en el formulario) +/- asi:

Private Sub UserForm_Initialize()
ComboBox1.ColumnCount = 3
ComboBox1.ColumnWidths = "35;75;40"
With Worksheets("códigos")
ComboBox1.List = _
.Range(.Range("a2"), .Range("a2").End(xlDown)).Resize(, 3).Value
End With
End Sub

2) para este requerimiento (creo que) deberas reconsiderar algunos puntos (p.e.)
a) en lugar de llenar el combobox1 en la inicializacion del formulario... -> rellenar el combobox2 (con los proveedores)
b) puedes utilizar (auto)filtros(avanzados) para cargar proveedores "unicos"
c) ya no seria necesario mostrar en el combobox1 a los proveedores
d) el combobox1 debera rellenarse con otro (auto)filtro(avanzado) segun el proveedor seleccionado en el combobox2

3) comenta cual es el rango usado/disponible en tu hoja "codigos" para usar filtros avanzados (de ser conveniente)
y/o cualquier otro detalle que pudiera estarse quedando "en el tintero" :))

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
#2 GRIEGO59
21/09/2008 - 05:26 | Informe spam
Hola
Hector


Mostrar la cita
Si, es más directo así, funciona bien.

Mostrar la cita
Si, es correcto.

Mostrar la cita
Si

Mostrar la cita
Correcto

Mostrar la cita
Si

Mostrar la cita
Solamente uso las columnas a, b y c desde la fla 2 y va creciendo, la fila 1
es para títulos. El resto de la hoja está disponible.

Gracias por tu ayuda,
saludos,
#3 Héctor Miguel
21/09/2008 - 06:24 | Informe spam
hola, Darío !

Mostrar la cita
el ejemplo que sigue, supone que:
- el primer combo se llama "proveedores" (y es el primero que se llena)
- el segundo combo se llama "productos" (y se llena de acuerdo con la seleccion del proveedor)
- al momento de mostrarse el formulario, la lista (en la hoja "codigos") YA NO CRECE -?-

utiliza los filtros avanzados en los siguientes eventos:
- _initialize (del formulario) para volcar la lista de proveedores (ordenada y solo registros unicos)
- _change (del combo proveedores) para filtrar y llenar el combo "productos" (segun proveedor seleccionado)
- _terminate (del formulario) para eliminar las columnas utilizadas por los filtros avanzados (hoja "codigos")

revisa, prueba, corrije, adapta, ... segun sea necesario
es probable que debas revisar el evento '_change' del segundo combo ("productos" ?)
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

en el modulo de codigo del formulario ==
Private CargandoProveedores As Boolean
Private Sub UserForm_Initialize()
CargandoProveedores = True
Productos.ColumnCount = 2
Productos.ColumnWidths = "75;40"
With Worksheets("códigos")
.Range("e1:f1") = .Range("c1")
.Range("a1").CurrentRegion.Offset(, 2).Resize(, 1).AdvancedFilter _
Action:=xlFilterCopy, CopyToRange:=.Range("e1"), Unique:=True
.Columns("e").Sort Key1:=.Range("e1"), Order1:=xlAscending, Header:=True
Proveedores.List = .Range(.Range("e2"), .Range("e2").End(xlDown)).Value
End With
CargandoProveedores = False
End Sub
Private Sub Proveedores_Change()
Productos.Clear
If CargandoProveedores Then Exit Sub
With Worksheets("códigos")
.Range("f2") = Proveedores.Value
.Range("h1:i1").Value = .Range("a1:b1").Value
.Range("a1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, CriteriaRange:=.Range("f1:f2"), _
CopyToRange:=.Range("h1:i1")
With .Range("h1").CurrentRegion
Productos.List = .Offset(1).Resize(.Rows.Count - 1).Value
End With
End With
End Sub
Private Sub UserForm_Terminate()
With Worksheets("códigos")
.Columns("d:i").Clear
Debug.Print .UsedRange.Address
End With
End Sub
#4 GRIEGO59
22/09/2008 - 01:28 | Informe spam
Hola,
Hector!
Al abrir el formulario me da el siguiente mensaje:

"Error de compilación, no se ha definido variable"

Se activa el depurador marcando las siguientes líneas:

Private Sub UserForm_Initialize()
CargandoProveedores = True

Saludos,
Darío

"Héctor Miguel" escribió:

Mostrar la cita
#5 Héctor Miguel
22/09/2008 - 02:11 | Informe spam
hola, Darío !

Mostrar la cita
me parece raro, ya que la variable "CargandoProveedores" (precisamente)
-> ES la primer linea del codigo sugerido (en el area de declaraciones)...
Mostrar la cita
saludos,
hector.
Ads by Google
Search Busqueda sugerida