Al momento de seleccionar algún elemento que tengamos en un control ListBox, dentro de un Userform, podemos optar por pasar cada columna de la lista a controles dentro del mismo formulario o a controles ubicados en otros Userforms. También por supuesto podemos optar por enviarlos a una hoja Excel.
A continuación imágenes y códigos para cada modelo.
CASO 1: pasar algunas columnas del elemento seleccionado a campos dentro del mismo Userform. Aquí se toman los datos de la hoja base de Materiales.
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean
'si no se selecciona algún elemento de la lista, cancela.
If ListBox1.ListIndex < 0 Then Exit Sub
‘se guarda en la variable el contenido de la primera columna
dato = ListBox1.List(ListBox1.ListIndex, 0)
‘se lo busca en la hoja Base de Materiales, previamente llamada como ‘homa’ (*)
Set busco = homa.Range("B:B").Find(dato, LookIn:=xlValues, lookat:=xlWhole)
‘si el dato fue encontrado, se pasan algunas columnas a la hoja
If Not busco Is Nothing Then
TextBox9 = homa.Range("C" & busco.Row)
TextBox8 = homa.Range("B" & busco.Row)
TextBox3 = homa.Range("D" & busco.Row)
TextBox5 = homa.Range("E" & busco.Row)
End If
‘se posiciona en el primer control a rellenar por parte del usuario
ComboBox1.SetFocus
‘se quita la selección a la lista.
ListBox1.ListIndex = -1
End Sub
(*) En el evento Initialize, se declaró una variable (pública) llamada 'homa' para guardar el nombre de la hoja base de Materiales.
UserFactura.Show
End Sub
En el segundo Userform (UserFactura) se programó también el evento Doble Clic. Y en este modelo, se pasó cada columna del elemento seleccionado a los controles del primer Userform (UF_UsoMaterial). Ajustar todos los nombres a los que correspondan en vuestros modelos.
Private Sub ListBox1_DblClick(ByVal Cancel As
MSForms.ReturnBoolean)
‘se controla que esté seleccionado un elemento de la
lista
If ListBox1.ListIndex >= 0 Then
‘se pasan
algunas columnas de la lista a los controles del primer UF
With UF_UsoMaterial
.TextBox8 = ListBox1.List(ListBox1.ListIndex, 0)
.TextBox9 = ListBox1.List(ListBox1.ListIndex, 1)
.TextBox3 = ListBox1.List(ListBox1.ListIndex, 2)
.TextBox5 = ListBox1.List(ListBox1.ListIndex, 3)
'revisar qué
otros campos debieran pasarse al otro formulario
'....
'se cierra
este uf quedando en el de Factura. Se quita el filtro a la hoja.
If
ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
'se cierra este segundo formulario para volver al primero.
Unload Me
End If
End Sub
Private Sub ListBox1_Click()
‘se controla que esté
seleccionado un elemento de la lista
If ListBox1.ListIndex >= 0
Then
‘se pasan algunas columnas de la
lista a una hoja resumen de Salidas
'-------------- OPCIONAL: PASAR A UNA HOJA DE SALIDAS
X =
Sheets("SALIDAS").Range("a" & Rows.Count).End(xlUp).Row
+ 1
With
Sheets("SALIDAS")
.Range("A" & X) = ListBox1.List(ListBox1.ListIndex, 0)
.Range("B" & X) = ListBox1.List(ListBox1.ListIndex, 1)
.Range("C" & X) = ListBox1.List(ListBox1.ListIndex, 2)
.Range("D" & X) = ListBox1.List(ListBox1.ListIndex, 3)
End With
'----------------------------------------------------------------------
‘otros pases
Unload Me
End If
End Sub
No hay comentarios.:
Publicar un comentario