Excel - Eliminar Filas en varias hojas de excel segun criterio seleccionado desde un ListBox

 
Vista:
Imágen de perfil de Heberto

Eliminar Filas en varias hojas de excel segun criterio seleccionado desde un ListBox

Publicado por Heberto (7 intervenciones) el 12/11/2022 14:54:51
eliminar

Buenas tardes a todos,
Necesito una orientacion en este caso, debo eliminar una fila especifica, seleccionada desde un ListBox en una tabla principal.
Posteriormente a eso se debe eliminar en las hojas secundarias cualquier fila ubicada en la columna "A" que tenga ese criterio..

El codigo:
Sub Eliminar_Partida_Click()
Dim Pregunta As Variant


If Me.DATA_PARTIDAS.ListIndex < 0 Then
MsgBox "No se ha elegido ningún registro", vbExclamation, "AVISO"
Else
Pregunta = MsgBox("Está seguro de eliminar el registro? No se Podra Recuperar la Informacion..!!!", vbYesNo + vbQuestion, "Progrese Capital Consultora")

If Pregunta = vbYes Then
'####################################################################################################
Sheets("PARTIDAS").Select
Uf4 = Sheets("PARTIDAS").Range("A1").End(xlDown).Row

For Fila = 2 To Uf4

item = Hoja1.Cells(Fila, 1).Value
codigo1 = Hoja1.Cells(Fila, 2).Value
partida = Hoja1.Cells(Fila, 3).Value
unidad = Hoja1.Cells(Fila, 4).Value
equipo = Hoja1.Cells(Fila, 5).Value
labor = Hoja1.Cells(Fila, 6).Value
material = Hoja1.Cells(Fila, 7).Value
costo = Hoja1.Cells(Fila, 8).Value

If codigo1 = codigo Then
Sheets("PARTIDAS").Select
ActiveCell.EntireRow.Select
Selection.Delete
End If

Next
'####################################################################################################
Sheets("MAT_PARTIDAS").Select
Uf5 = Sheets("MAT_PARTIDAS").Range("A1").End(xlDown).Row

For Fila1 = 2 To Uf5

partida1 = Hoja2.Cells(Fila1, 1).Value
codigo = Hoja2.Cells(Fila1, 2).Value
material = Hoja2.Cells(Fila1, 3).Value
unidad = Hoja2.Cells(Fila1, 4).Value
costo = Hoja2.Cells(Fila1, 5).Value

If partida1 = partida Then
Sheets("MAT_PARTIDAS").Select
ActiveCell.EntireRow.Select
Selection.Delete
End If

Next
'####################################################################################################
Sheets("MO_PARTIDAS").Select
Uf6 = Sheets("MO_PARTIDAS").Range("A1").End(xlDown).Row

For Fila2 = 2 To Uf6

partida2 = Hoja3.Cells(Fila2, 1).Value
codigo = Hoja3.Cells(Fila2, 2).Value
labor = Hoja3.Cells(Fila2, 3).Value
costo = Hoja3.Cells(Fila2, 4).Value

If partida2 = partida Then
Sheets("MO_PARTIDAS").Select
ActiveCell.EntireRow.Select
Selection.Delete
End If

Next
'####################################################################################################
Sheets("EQUIP_PARTIDAS").Select
Uf7 = Sheets("EQUIP_PARTIDAS").Range("A1").End(xlDown).Row

For Fila3 = 2 To Uf7

partida3 = Hoja4.Cells(Fila3, 1).Value
codigo = Hoja4.Cells(Fila3, 2).Value
equip = Hoja4.Cells(Fila3, 3).Value
costo = Hoja4.Cells(Fila3, 4).Value

If partida3 = partida Then
Sheets("MO_PARTIDAS").Select
ActiveCell.EntireRow.Select
Selection.Delete
End If

Next
'####################################################################################################


End If


End If

'####################################################################################################
MsgBox "Se ha eliminado con exito el registro", vbExclamation, "Progrese Capital Consultora"

End Sub

El codigo solo funciona en la Hoja Principal.. no realiza su funcion en las hojas anexas...


Agradecido de antemano...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Eliminar Filas en varias hojas de excel segun criterio seleccionado desde un ListBox

Publicado por Antoni Masana (2477 intervenciones) el 14/11/2022 16:45:53
Es evidente que no puedo probar la macro para ver qué es lo que falla.
La he arreglado para leerla mejor y hay cosas que no entiendo.
Pongo la macro y los comentarios en la misma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Sub Eliminar_Partida_Click()
    Dim Pregunta As Integer, Uf4 as Long, Uf5 as Long, Uf6 as Long, Uf7 as Long
 
    If Me.DATA_PARTIDAS.ListIndex < 0 Then
        MsgBox "No se ha elegido ningún registro", vbExclamation, "AVISO"
    End If
 
    Pregunta = MsgBox("Está seguro de eliminar el registro? No se Podra Recuperar la Informacion..!!!", vbYesNo + vbQuestion, "Progrese Capital Consultora")
 
    If Pregunta = vbYes Then
        '####################################################################################################
        Sheets("PARTIDAS").Select
        Uf4 = Sheets("PARTIDAS").Range("A1").End(xlDown).Row
 
        For Fila = 2 To Uf4
            ' --- Si ya estas en la hoja PARTIDAS ¿Por que haces referencia a la hoja1?
 
            item = Hoja1.Cells(Fila, 1).Value                 ' --- ¿Que utilidad tiene esto?
            codigo1 = Hoja1.Cells(Fila, 2).Value
            partida = Hoja1.Cells(Fila, 3).Value                 ' --- ¿Que utilidad tiene esto?
            unidad = Hoja1.Cells(Fila, 4).Value                 ' --- ¿Que utilidad tiene esto?
            equipo = Hoja1.Cells(Fila, 5).Value                 ' --- ¿Que utilidad tiene esto?
            labor = Hoja1.Cells(Fila, 6).Value                 ' --- ¿Que utilidad tiene esto?
            material = Hoja1.Cells(Fila, 7).Value                 ' --- ¿Que utilidad tiene esto?
            costo = Hoja1.Cells(Fila, 8).Value                 ' --- ¿Que utilidad tiene esto?
 
            ' --- ¿Que valor tiena Codigo?
 
            If codigo1 = codigo Then
                Sheets("PARTIDAS").Select
                ActiveCell.EntireRow.Select
                Selection.Delete
            End If
        Next
        '####################################################################################################
        Sheets("MAT_PARTIDAS").Select
        Uf5 = Sheets("MAT_PARTIDAS").Range("A1").End(xlDown).Row
 
        For Fila1 = 2 To Uf5
            ' --- Si ya estas en la hoja MAT_PARTIDA ¿Por que haces referencia a la hoja2?
 
            partida1 = Hoja2.Cells(Fila1, 1).Value
            codigo = Hoja2.Cells(Fila1, 2).Value                 ' --- ¿Que utilidad tiene esto?
            material = Hoja2.Cells(Fila1, 3).Value                 ' --- ¿Que utilidad tiene esto?
            unidad = Hoja2.Cells(Fila1, 4).Value                 ' --- ¿Que utilidad tiene esto?
            costo = Hoja2.Cells(Fila1, 5).Value                 ' --- ¿Que utilidad tiene esto?
 
            ' --- ¿Que valor tiena partida?
 
            If partida1 = partida Then
                Sheets("MAT_PARTIDAS").Select
                ActiveCell.EntireRow.Select
                Selection.Delete
            End If
        Next
        '####################################################################################################
        Sheets("MO_PARTIDAS").Select
        Uf6 = Sheets("MO_PARTIDAS").Range("A1").End(xlDown).Row
 
        For Fila2 = 2 To Uf6
            ' --- Si ya estas en la hoja MO_PARTIDA ¿Por que haces referencia a la hoja3?
 
            partida2 = Hoja3.Cells(Fila2, 1).Value
            codigo = Hoja3.Cells(Fila2, 2).Value                 ' --- ¿Que utilidad tiene esto?
            labor = Hoja3.Cells(Fila2, 3).Value                 ' --- ¿Que utilidad tiene esto?
            costo = Hoja3.Cells(Fila2, 4).Value                 ' --- ¿Que utilidad tiene esto?
 
            ' --- ¿Que valor tiena partida?
 
            If partida2 = partida Then
                Sheets("MO_PARTIDAS").Select
                ActiveCell.EntireRow.Select
                Selection.Delete
            End If
        Next
        '####################################################################################################
        Sheets("EQUIP_PARTIDAS").Select
        Uf7 = Sheets("EQUIP_PARTIDAS").Range("A1").End(xlDown).Row
 
        For Fila3 = 2 To Uf7
            ' --- Si ya estas en la hoja EQUIP_PARTIDA ¿Por que haces referencia a la hoja4?
 
            partida3 = Hoja4.Cells(Fila3, 1).Value
            codigo = Hoja4.Cells(Fila3, 2).Value                 ' --- ¿Que utilidad tiene esto?
            equip = Hoja4.Cells(Fila3, 3).Value                 ' --- ¿Que utilidad tiene esto?
            costo = Hoja4.Cells(Fila3, 4).Value                 ' --- ¿Que utilidad tiene esto?
 
            ' --- ¿Que valor tiena partida?
 
            If partida3 = partida Then
                Sheets("MO_PARTIDAS").Select
                ActiveCell.EntireRow.Select
                Selection.Delete
            End If
        Next
    End If
    MsgBox "Se ha eliminado con exito el registro", vbExclamation, "Progrese Capital Consultora"
End Sub


Te pongo un código mas optimizado.
Sigue habiendo las dos grandes incógnita ¿Que valor tiene la variable CODIGO? ¿Que valor tiene la variable PARTIDA?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub Eliminar_Partida_Click()
    Dim Pregunta As Integer, Uf4 as Long, Uf5 as Long, Uf6 as Long, Uf7 as Long
 
    If Me.DATA_PARTIDAS.ListIndex < 0 Then
        MsgBox "No se ha elegido ningún registro", vbExclamation, "AVISO"
    End If
 
    Pregunta = MsgBox("Está seguro de eliminar el registro? No se Podra Recuperar la Informacion..!!!", _
                      vbYesNo + vbQuestion, _
                      "Progrese Capital Consultora")
 
    If Pregunta = vbYes Then
        With Sheets("PARTIDAS")
            Uf4 = .Range("A1").End(xlDown).Row
            For Fila = Uf4 To 2 Step -1
                If .Cells(Fila, 2).Value = codigo Then ActiveCell.EntireRow.Select: Selection.Delete
                End If
            Next
        End With
        ' ---&---
        With Sheets("MAT_PARTIDAS")
            Uf5 = .Range("A1").End(xlDown).Row
            For Fila1 = Uf5 To 2 Step -1
                If .Cells(Fila1, 1).Value = partida Then ActiveCell.EntireRow.Select: Selection.Delete
            Next
        End With
        ' ---&---
        With Sheets("MO_PARTIDAS")
            Uf6 = .Range("A1").End(xlDown).Row
            For Fila2 = Uf6 to 2 Step -1
                If .Cells(Fila2, 1).Value = partida Then ActiveCell.EntireRow.Select: Selection.Delete
            Next
        End With
        ' ---&---
        With Sheets("EQUIP_PARTIDAS")
            Uf7 = .Range("A1").End(xlDown).Row
            For Fila3 = Uf7 to 2 Step -1
                If .Cells(Fila3, 1).Value = partida Then ActiveCell.EntireRow.Select: Selection.Delete
            Next
        End With
    End If
    MsgBox "Se ha eliminado con exito el registro", vbExclamation, "Progrese Capital Consultora"
End Sub

Y no me vale que es del registro que has borrado por que no es ese su valor.

Otro detalle importante.

Cuando se elimina registros hay que hacerlo de abajo a arriba se puede hacer de arriba a abajo pero se ha de cambiar el bucle.
La razón es que por ejemplo eliminas los datos de la fila 5 y el for salta a la fila 6, pero los datos que estaban en la fila 6 antes de eliminar la 5 ahora están en la fila 5 y no los has verificado porque después de borra la 5 tienes que volver a revisar la 5 hasta que no borre o se acaben los datos.

Un ejemplo: Tienes que borrar la A

1
2
3
4
5
6
Fila   Dato
  1     A  (1)
  2     A  (2)
  3     A  (3)
  4     A  (4)
  5     B

Resultado

1
2
3
4
Fila   Dato
  1     A  (2)
  2     A  (4)
  5     B

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Heberto

Eliminar Filas en varias hojas de excel segun criterio seleccionado desde un ListBox

Publicado por Heberto (7 intervenciones) el 16/11/2022 15:44:35
Buenas tardes,
Sr. Antoni.. muy agradecido... los mas valorado de su ayuda fue la pregunta que hiso..
¿Que valor tiene la variable CODIGO? ¿Que valor tiene la variable PARTIDA?.

Activando Option Explicit..
me di cuenta que las habia un problema con los valores asignados que estaban en conflicto y por eso solo borraba en la primera pagina...
Resolvi el tipo de variables...

Tome parte de su codigo.. ¨*** If .Cells(Fila2, 1).Value = partida Then ActiveCell.EntireRow.Select: Selection.Delete ****

lo adapte y funciono...

Excelente

Saludos Cordiales...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar