Como pasar items de un listbox a una hoja en excel dependiendo de los datos de la hoja de excel

Tengo un macro para el control de mis viáticos, los mismo posees códigos para control interno de la corporación, en fin mi macro con tiene un listbox al cual se le cargan los datos de varias textbos y combobox, el problema esta en el momento de pasar los datos del listbox a la hoja de excel. En mi hoja de excel tengo estos datos.

Necesito hacer que el item del listbox se posiciones en la fila de la hoja de excel dependiendo del valor de la columna SV. Logre usar este codigo

Buscamoos la última fila
fila = 8
Do While Hoja2.Cells(fila, 9) <> "SV-" & Me.ListBox1.List(i, 1)
fila = fila + 1
Loop
Final = fila
'Agregamos el bloque de items
For i = 0 To Me.ListBox1.ListCount - 1
Hoja2.Cells(Final, 7) = "SR-" & Me.ListBox1.List(i, 3) 'SR
Hoja2.Cells(Final, 11) = Me.ListBox1.List(i, 4) 'monto
Hoja2.Cells(Final, 15) = "N° " & Me.ListBox1.List(i, 0) 'abono
'fecha'
Hoja2.Cells(Final, 5) = Format(fecha.Value)
Final = Final + 1
Next
ListBox1.Clear 'Limpiamos el listbox
i = 0 'Reiniciamos el índice de registros del listbox
Sheets("control de viatico").Visible = False
MsgBox "¡Registro Exitoso!", vbOKOnly, "Registro"
fecha = ""
asig.SetFocus 'Enviamos el foco al control
End If

Funciona de maravilla, solo que posiciona solo el primer item del listbox en la fila correspondiente en la tabla dependiendo del dato de la columna SV, el resto de los item se agregan justo debajo de la primera fila, por lo tanto necesito que dada intem busque su fila que dependa del valor de la colunnma SV de la hoja de excel.

1 Respuesta

Respuesta
1

Entiendo lo siguiente, quieres actualizar la hoja según el número de SV. Para eso tienes que buscar el número de SV en la hoja2, en la columna "I", obtener la fila y entonces actualizar los datos.

No pusiste tu código completo, reemplaza tu código que pusiste por el siguiente código:

 'Buscamoos la última fila
        'fila = 8
        'Do While Hoja2.Cells(fila, 9) <> "SV-" & Me.ListBox1.List(i, 1)
        'fila = fila + 1
        'Loop
        'Final = fila
        'Agregamos el bloque de items
        For i = 0 To Me.ListBox1.ListCount - 1
            num_sv = "SV-" & ListBox1.List(i, 1)
            Set b = Hoja2.Columns("I").Find(num_sv, lookat:=xlWhole)
            If Not b Is Nothing Then
                fila = b.Row
                Hoja2.Cells(fila, 7) = "SR-" & Me.ListBox1.List(i, 3) 'SR
                Hoja2.Cells(fila, 11) = Me.ListBox1.List(i, 4) 'monto
                Hoja2.Cells(fila, 15) = "N° " & Me.ListBox1.List(i, 0) 'abono
                'fecha'
                Hoja2.Cells(fila, 5) = Format(fecha.Value)
                'Final = Final + 1
            End If
        Next
        ListBox1.Clear 'Limpiamos el listbox
        i = 0 'Reiniciamos el índice de registros del listbox
        Sheets("control de viatico").Visible = False
        MsgBox "¡Registro Exitoso!", vbOKOnly, "Registro"
        fecha = ""
        asig.SetFocus 'Enviamos el foco al control
    End If

.


.

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

.

Avísame cualquier duda

.

Muchas gracias por tu pronta respuesta Dante, si tienes razón no puse el código completo ya que es amplio e involucra varios casos y elementos, ahora tu código me sigue dando la misma falla, supongo no me explique muy clara mente, así que lo explicare de este otro modo.

Tengo mi tabla de esta forma:

Puedes observar que en la columna abonos aun faltan ciertos montos, los cuales los cargo en el listbos con un orden diferente, de esta forma:

Lo que requiero es que cada fila del listbox se posicione en la fila correspondiente de mi hoja de excel según el dato de la columna SV. Como los datos no son continuos en un orden, debo hacer que al pasar los datos del listbox a excel se copien o actualicen en la intentar que le corresponde. Saludos

Espero me entiendas.

Tu código busca una fila y de ahí hacia abajo pone los datos.

Mi código no puede presentar la misma falla, o no lo copiaste bien, o no lo copiaste completo.

Mi código busca el dato SV, si lo encuentra, en esa línea pone los datos.

Revisa nuevamente con mi código, si tienes dificultades, entonces envíame tu archivo para revisarlo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Francisco Lopez

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas