Corrección en macro Excel. ¿Por qué no elimina la fila seleccionada en el ListBox y si otra?

Para Dante Amor

Especialmente elimina de las primeras o 1ª línea, no la que se selecciona en el ListBox

Esta la macro del botón cbtEliminar en formulario

Private Sub cbtEliminar_Click()
        Dim i As Long
        Dim d As Variant
        On Error GoTo FIN:
        d = lista.List(lista.ListIndex, 1) '1 columna B
        C = lista.List(lista.ListIndex, 0) '0 columna A
        If MsgBox("¿Confirma ELIMINAR el articulo " & C & " del registro " & d & "?", vbYesNo + vbQuestion, "ELIMINACIÓN") = vbNo Then Exit Sub
        With Sheets("Productos")
            i = lista.ListIndex + 2
            .Range("a" & i).EntireRow.Delete
    Call BuscaCambio
    Call actualizar_lista
        End With
    Exit Sub
FIN:
    MsgBox ("No seleccionó ningún dato para eliminar"), vbInformation, "Eliminar"
Buscar.SetFocus
End Sub

El Call BuscaCambio es este

Sub BuscaCambio() 'Por DAM Busqueda obligando a seleccionar el criterio por el que buscar
    frmProd.pasar = 1
    frmProd.buscar_Change
    frmProd.pasar = 0
End Sub

Y el Call actualizar_lista, este, que lo usan 2 macros mas dentro del formulario

Private Sub actualizar_lista()
    lista.RowSource = ""
    lista.RowSource = "Filtro!A2:G" & Sheets("Filtro").Range("A" & Rows.Count).End(xlUp).Row
    Buscar.SetFocus
End Sub

Sucede que (aun no había necesitado eliminar algún articulo (linea)).

Abro el formulario, busco artículo, selecciono línea en ListBox y piso botón que elimina, para eliminar la línea seleccionada en ListBox y en la hoja y actualiza el ListBox.

El procedimiento pareciera que lo hace, pero reviso y la que seleccioné sigue ahí, tanto en el ListBox como en la hoja.

Lo que pretendo es que elimine la que seleccione, en la hoja y actualice el ListBox.

1 respuesta

Respuesta
3

Envíame tu archivo y me explicas cómo hago para borrar un registro

Hola dante

En la hoja INF esta una pequeña información sobre fondo amarillo

Hola Dante, no hay rollo con eso.

Puedo esperar, no es plantilla que yo haya negociado ni parecido, no estoy en esos trabajos, es plantilla de uso  personal.

Explico:

Yo trabajo en mecánica maquinaria CAT y JD no tengo taller, trabajo a domicilio, solo las partes que tenga que apartar de la máquina y pueda traérmelas para la casa, (tengo espacio) para trabajarlas (repararlas o REconstruirlas) y algunas piezas las tengo, pero para saber dónde las tengo, prepare con tu grande ayuda, así como otras menos.

Esa es la finalidad de esta plantilla.

Soy un simple mecánico que estudié y me dieron bastantes cursos sobre mecánica maquinaria CAT. Cuando era joven y trabajé en empresa de maquinaria como técnico. Ahora hace años que me dedique a trabajar solo y a domicilio, es decir, voy donde está la maquina

          Cuanto al tiempo esperar, pues no tengo problema alguno, ni prisa.

Lo entiendo así.

Usando el filtro (buscador) lo filtrado pasa hacia la hoja filtro, ¿cierto? entonces usando el buscador elimina en la hoja filtro que no tiene incidencia con la hoja Productos, ¿cierto? Claro que al actualizar el ListBox, la línea sigue ahí porque sigue en la hoja Productos.

La macro está preparada para eliminar en la hoja Productos, y no en la Filtro, pienso que sí. Talvez al parecer que, si elimina, eliminará en la hoja Filtro que nada tiene incidencia en la hoja Productos

Por tal razón es que, SI NO USO el buscador, todo va bien.

Gracias amigo, los deseos para que tengas un buen fin de semana, contandop tambien con el Viernes.

Te anexo la macro actualizada

Private Sub cbtEliminar_Click()
'Eliminar
    Dim i As Long
    Dim d As Variant
    If lista.ListIndex = -1 Then
        MsgBox "Selecciona un registro de la lista"
        Exit Sub
    End If
    d = lista.List(lista.ListIndex, 1) '1 columna B
    c = lista.List(lista.ListIndex, 0) '0 columna A
    If MsgBox("¿Confirma ELIMINAR el codigo " & c & " del registro " & d & "?", _
        vbYesNo + vbQuestion, "ELIMINACIÓN") = vbNo Then Exit Sub
    '
    With Sheets("Productos")
        codigo = lista.List(lista.ListIndex, 0)
        Set b = .Columns("A").Find(codigo, lookat:=xlWhole)
        If Not b Is Nothing Then
            'i = lista.ListIndex + 2
            i = b.Row
            .Range("a" & i).EntireRow.Delete
            Call BuscaCambio
            'Call actualizar_lista
        End If
    End With
Buscar.SetFocus
End Sub

sal u dos

Gracias Dante

Le active línea

 'Call actualizar_lista

para probar ¿y? ¿Pregunto cuál puede ser el daño o no de activarla?

También le cambie el rango en evento Sub buscar_Change()

    Sheets("Filtro").Range("A1:G1500").AdvancedFilter _
                     Action:=xlFilterCopy, _
                     CriteriaRange:=Sheets("Filtro").Range("A1:G2"), _
                     CopyToRange:=Sheets("Filtro").Range("H1:N1500")

De 22 a 1500 porque solo mostraba co nel buscador, hasta 22

Gracias amigo por tu tiempo

Esta línea

 'Call actualizar_lista

Carga nuevamente toda la lista

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas