Como Podría hacer para guardar el datos de un combobox, después de haber cargado los datos desde un listbox

Tengo un código que me guarda datos a una hoja de exel, en mi formulario con un mismo botón guardo y actualizo, tengo un listbox el cual al darle clic me carga datos en un label("codigo"), un texbox("producto") y un combobox("categoria"), al guardar no me da ningún problema, el detalle es al actualizar siempre se guarda o el combobox o el texbox no me permite actualizqar los dos al mismo tiempo y eso me di cuenta poniendo el código de uno de ellos en comentario(" ' ").

Ayuda o una aclaración por favor me rompo la cabeza y no le atino.

Le dejo la parte del código donde actualizo:

Private Sub actualiza()
Dim i As Integer
Dim final As Integer

For i = 2 To 1000
If Hoja2.Cells(i, 1) = "" Then
final = i - 1
Exit For
End If
Next

For i = 2 To final
If Val(lblCodigo.Caption) = Hoja2.Cells(i, 1) Then

Hoja2.Cells(i, 2) = txtproductos
Hoja2.Cells(i, 3) = cboCat
Exit For
End If
Next
End Sub

1 Respuesta

Respuesta
1

No le veo ningún problema a tu código, tendría que revisarlo, envíame tu archivo y dime qué pasos debo seguir para llegar a ese problema que tienes.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Ayrton Joao Ramos Bustamante” y el título de esta pregunta.

¡Gracias! 

por responderme dante te acabo de enviar el archivo a tu correo

El detalle es el siguiente.

Te explico la secuencia:

1. Seleccionas un dato del listbox

2. Presionas el botón "Edita"

3. Cambias los datos nombre y categoría

4. Presionas el botón "Actualiza"

5. Se ejecuta el código:

Hoja2.Cells(i, 2) = txtproductos

6. Como tienes el listbox cargado con la propiedad RowSource. Entonces, cada vez que modificas un dato en la hoja, el listbox, en automático se ejecuta este evento:

Private Sub lstLista_Click()
    'lblCodigo = lstLista.Column(0)
    'txtProducto = lstLista.Column(1)
    'cboCat = lstLista.Column(2)
    Dim fila As Single
    fila = lstLista.ListIndex + 2
    With Hoja2.Range(lstLista.RowSource)
        lblCodigo.Caption = .Offset(lstLista.ListIndex, 0).Resize(1, 1).Value
        txtProducto.Text = .Offset(lstLista.ListIndex, 1).Resize(1, 1).Value
        cboCat.Text = .Offset(lstLista.ListIndex, 2).Resize(1, 1).Value
    End With
End Sub

Dentro de este evento tienes esta línea:

cboCat.Text = .Offset(lstLista.ListIndex, 2).Resize(1, 1).Value

Lo que hace es actualizar el cboCat = a lo que está en la hoja, si en la pantalla habías seleccionado "bolsas" pero en la hoja tenías "paquetes", entonces nuevamente en el cobCat pone el dato de la hoja, en este momento en la hoja tienes "paquetes".

Después en "Actualiza" tienes este código:

Hoja2. Cells(i, 3) = cboCat

Ahora en cboCat tienes "paquetes", entonces en la hoja2 pone "paquetes".

Es por eso que "aparentemente" no está actualizando la hoja, sí actualiza la hoja, pero en el intermedio, tu código está cambiando el dato en el textbox.


Para evitar lo anterior, voy a pasar los datos de los textbox a una variable y después voy a poner el dato de la variable en las celdas:

Private Sub actualiza()
    Dim w_pro, w_cbo, fila
    w_pro = txtProducto
    w_cbo = cboCat
    fila = lstLista.ListIndex + 2
    Hoja2.Cells(fila, 2) = w_pro
    Hoja2.Cells(fila, 3) = w_cbo
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas