Seleccionar en Combobox un producto y automáticamente se muestren seriales en un ListBox

Primero que nada quiero agradecer mucho a todoexpertos porque de verdad me han ayudado mucho. No soy experta en Excel pero he aprendido mucho. Mi caso es el siguiente:

Tengo un UserForm que contiene 1 Combobox, 2 TextBox, 1 ListBox y 3 Botones. Necesito que cuando seleccione un producto del Combobox1 se muestre en el TextBox1. En el TextBox2 requiero colocar los seriales que corresponden a ese producto y que al darle al CommandButton1 los agregue en el ListBox1. Después que se agreguen todos lo seriales darle al botón "aceptar" y se copien en la hoja "SERIALES". En esta hoja se debe copiar el valor TextBox1 en la fila 5 desde la columna B y los seriales en la columna donde se copió el TextBox1 (debajo, o sea, en las filas siguientes). Si agrego otro producto con seriales él automáticamente se copia en la fila 5 de la última columna vacía y debajo se colocan los seriales. Hasta aquí he logrado que funcione lo que busco. Mi problemas es:

- Necesito que si el producto ya existe y se quieren agregar más seriales, al momento de colocar el producto en el ComboBox1 indique que ya existe y muestre los seriales que ya tiene en la hoja "SERIALES" en el ListBox1 para así poder agregar más seriales y al darle "aceptar" se copie todo nuevamente hasta con los seriales existentes (quiero que se muestren los seriales ya guardados para que vean si ese serial ya fue ingresado). En este momento si coloco un producto que ya existe simplemente lo vuelve a crear con los nuevos seriales y no me sirve así.

Este es mi UserForm

Este es mi código hasta ahora:

Private Sub aceptar_Click()

Set h = Sheets("SERIALES")

If ComboBox1 = "" Then
MsgBox ("DEBE SELECCIONAR UN PRODUCTO!"), vbCritical, "Resultado"
End If

For Columna = 2 To 1000
If h.Cells(5, Columna) = "" Then
Final = Columna
Exit For
End If
Next
h.Cells(5, Final) = TextBox1
Fila = 6
For i = 0 To ListBox1.ListCount - 1
h.Cells(Fila, Columna).Value = ListBox1.List(i, 0)
Fila = Fila + 1
Next
End If
ComboBox1 = ""
TextBox2 = ""

Sheets("INVENTARIO").Select
Range("F2").Activate
Unload Me

End Sub

____________

Private Sub cancelar_Click()

Unload Me

End Sub

____________

Private Sub ComboBox1_Change()

Dim Fila As Integer
Dim Final As Integer

If ComboBox1.Value = "" Then
TextBox1 = ""
End If

For Fila = 10 To 1000
If Sheets("INVENTARIO").Cells(Fila, 1) = "" Then
Final = Fila - 1
Exit For
End If
Next
For Fila = 10 To Final
If ComboBox1 = Sheets("INVENTARIO").Cells(Fila, 1) Then
TextBox1 = Sheets("INVENTARIO").Cells(Fila, 1)
Exit For
End If
Next

End Sub

____________

Private Sub ComboBox1_Enter()

Dim Fila As Integer
Dim Final As Integer
Dim Lista As String

For Fila = 1 To ComboBox1.ListCount
ComboBox1.RemoveItem 0
Next Fila

For Fila = 10 To 1000
If Sheets("INVENTARIO").Cells(Fila, 1) = "" Then
Final = Fila - 1
Exit For
End If
Next
For Fila = 10 To Final
Lista = Sheets("INVENTARIO").Cells(Fila, 1)
ComboBox1.AddItem (Lista)
Next
End Sub

______________

Private Sub CommandButton1_Click()

ListBox1.AddItem TextBox2.Value
ListBox1.List(a, 1) = TextBox2.Value
TextBox2 = ""

End Sub

______________

1

1 Respuesta

4.583.575 pts. Sancho, si los perros ladran ...

Vamos por Pasos.

PASO 1. Seleccionar un dato en el combobox1

- Pon una imagen donde muestres cómo están tus datos que se cargan en el combobox1

- Un ejemplo explicando: cuando seleccionas un dato en el combobox1, qué dato quieres que aparezca en el textbox1.

- Buscar el dato del combobox1 en la hoja "Seriales" y mostrar en el listbox los seriales registrados para el dato del combobox1. Puedes poner una imagen de la hoja "seriales" para ver cómo están los datos.


Te ayudo con el código para el PASO1, pero es necesario que pongas las imágenes para ver cómo están tus datos.

Después de terminar el paso1, revisamos el paso2.

El ComboBox1 llama los productos de la hoja "INVENTARIO" Columna "A"

En esta hoja está botón SERIALES que llama el UserForm

En el UserForm escojo el producto que tiene seriales. Al seleccionarlo se copia en el TextBox1 (Código) y en el TextBox2 (Serial) se coloca el serial y al darle al boton Guardar se colocan el el Listbox1. Cuando se le da Aceptar se guarda el Código y los Seriales en la hoja "SERIALES"

Como se observa se copian como quiero pero si ya existe el producto puedes ver que se vuelve a crear, no agregó el nuevo serial a la columna con el producto ya existente. Lo que quiero es que cuando seleccione en el ComboBox1 el producto, automáticamente me indique que el producto existe y me muestre los seriales que ya posee en el ListBox1 para así agregar más seriales y a su vez verificar que los seriales que se muestran en el ListBox1 no son los que tienen por agregar. Al darle al botón aceptar lo que se espera es que se actualice la columna del producto en cuestión. Esta hoja "SERIALES" va a estar oculta. Espero me puedas ayudar y de verdad te agradezco mucho.

Buenas tardes Dante Amor, espero se encuentre muy bien. Quería saber si entendió las imágenes y explicaciones que le envié o lo que quiero hacer es demasiado complicado? De ser así me puede guiar en cómo puedo hacer esto mismo pero de una manera más simple? Acepto sugerencias. Espero su respuesta. De antemano, muchas gracias.

Te anexo todo el código.

Cambia tu código por el siguiente:

Dim h1, h2
'
Private Sub ComboBox1_Change()
'Por Dante Amor
'
'Al seleccionar un código, pone la descripción en textbox1
'Y Carga el listbox con los seriales de la hoja "SERIALES"
'
    '
    TextBox1.Value = ""
    TextBox2.Value = ""
    ListBox1.Clear
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
        Exit Sub
    End If
    '
    'PONE DESCRIPCIÓN
    fila = ComboBox1.ListIndex + 10
    TextBox1.Value = h1.Cells(fila, "B").Value
    '
    'CARGA SERIALES EN EL LISTBOX
    Set b = h2.Rows(5).Find(ComboBox1.Value, lookat:=xlWhole)
    If Not b Is Nothing Then
        uf = h2.Cells(Rows.Count, b.Column).End(xlUp).Row
        For i = 6 To uf
            ListBox1.AddItem h2.Cells(i, b.Column).Value
        Next
    End If
End Sub
'
Private Sub CommandButton1_Click()
'GUARDAR SERIE
    '
    'VALIDACIONES
    If TextBox2.Value = "" Then
        MsgBox "Captura el serial"
        TextBox2.SetFocus
        Exit Sub
    End If
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
        MsgBox "Debes seleccionar un código"
        ComboBox1.SetFocus
        Exit Sub
    End If
    '
    'BUSCA CÓDIGO
    Set b = h2.Rows(5).Find(ComboBox1.Value, lookat:=xlWhole)
    If Not b Is Nothing Then
        col = b.Column
    Else
        col = h2.Cells(5, Columns.Count).End(xlToLeft).Column + 1
        h2.Cells(5, col).Value = ComboBox1.Value
    End If
    '
    'agrega serial
    uf = h2.Cells(Rows.Count, col).End(xlUp).Row + 1
    h2.Cells(uf, col).Value = TextBox2.Value
    '
    'carga seriales en el listbox
    ListBox1. Clear
    Set b = h2.Rows(5).Find(ComboBox1.Value, lookat:=xlWhole)
    If Not b Is Nothing Then
        uf = h2.Cells(Rows.Count, b.Column).End(xlUp).Row
        For i = 6 To uf
            ListBox1.AddItem h2.Cells(i, b.Column).Value
        Next
    End If
End Sub
'
Private Sub UserForm_Activate()
    Set h1 = Sheets("Inventario")
    Set h2 = Sheets("SERIALES")
    '
    'CARGA COMBO
    For i = 10 To h1.Range("A" & Rows.Count).End(xlUp).Row
        ComboBox1.AddItem h1.Cells(i, "A").Value
    Next
End Sub
'
Private Sub cancelar_Click()
    Unload Me
End Sub

Nota: Revisa que la declaración de las variables h1 y h2 queden al inicio de todo el código.


Esto es lo que hace el código:

1. Carga en el combobox1 todos los códigos de la hoja "Inventario"

2. Al seleccionar un código, en automático:

- En el textbox1 te pone la descripción del código

- En el listbox te pone los seriales de la hoja "seriales", correspondientes al código

3. En botón commandbutton1:

- Busca el código en la hoja "seriales", si NO lo encuentra entonces lo agrega en la hoja "seriales" en la siguiente columna disponible de la fila 5.

- Agrega el nuevo serial debajo de su correspondiente código.

- Carga el listbox con los seriales correspondientes al código.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

¡Gracias! Quedó Perfecto!!!!!! Justo lo que necesitaba. Tenía días partiéndome la cabeza y era tan sencillo. Muchísimas Gracias!! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas