Prueba de VBA para línea vacía y eliminación

Resuelto
Hola,

He estado revisando el foro y no he encontrado la respuesta a mi pregunta.

Deseo eliminar las filas que están completamente vacías de una tabla. Mi macro funciona, pero muestra este mensaje de error y no entiendo por qué.

Error en tiempo de ejecución '1004':
Error definido por la aplicación o definido por el objeto


Aquí está la macro en cuestión:
sub supligne
Dim lastline,firstline as integer

'encuentra la última línea de la tabla
lastline = ActiveSheet.UsedRange.Rows.Count

'encuentra la primera línea de la tabla de datos
For a = 1 To lastline Step 1
If Cells(a, 1).Value = "Priority" Then
firstline = a + 1
End If
Next a

'Elimina las filas vacías

For r = lastline To firstline Step -1
If Application.CountA(Rows(r)) = Empty Then Rows(r).EntireRow.Delete

Next r
end sub

He intentado cambiar Empty por "", pero eso funciona aún peor.

¿Alguien puede decirme dónde me he equivocado?

Muchas gracias

PD: Lo siento si no escribo todas las letras acentuadas, pero actualmente estoy trabajando con un teclado qwerty.

Configuración: Windows XP / Internet Explorer 7.0

9 respuestas

  1. Hola,
    Aprovecho para cambiar [Empty] por [0].
    --
    Saludos.
    El Pingüino
    2
    1. ¿Por qué? Eso no cambia nada a mi problema.
      0
  2. Hola el hilo,

    llego después de la batalla pero bueno

    Option Explicit

    Sub supligne()
    Dim lastline, firstline As Integer
    Dim a, r As Long
    'encuentra la última línea de la tabla
    lastline = ActiveSheet.UsedRange.Rows.Count
    'encuentra la primera línea de la tabla de datos
    For a = 1 To lastline Step 1
    If Cells(a, 1).Value = "Priority" Then
    firstline = a + 1
    End If
    Next a
    For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    Next r
    End Sub

    o más simplemente

    Sub Suplignvides()
    Dim r As Long
    For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    Next r
    End Sub
    --
    A+
    Mike-31

    Un periodo de fracaso es un momento perfecto para sembrar las semillas del conocimiento.
    2
    1. En la línea:
      Si Application.CountA(Rows(r)) = Vacío Entonces Rows(r).EntireRow.Delete

      Lo que está subrayado es lo que está resaltado en modo depuración.
      1
      1. y luego poner

        Si Application.CountA(Rows(r)) = Empty Entonces Rows(r).EntireRow.Delete

        Buenas noches
        1
        1. Hola,
          En este caso el problema está en otro lugar, ¿en qué línea se detiene la ejecución del procedimiento?

          --
          Saludos.
          El Pingüino
          0
          1. Mala definición de la variable. En lugar de
            For r = lastline To fistline Step -1

            hay que
            For r = lastline To firstline Step -1

            y así funciona.
            Saludos
            0
            1. Muchas gracias,

              Y pensar que estuve buscando durante varias horas por qué no funcionaba. Tendré más cuidado la próxima vez, es realmente tonto perder tanto tiempo por eso.

              Gracias de nuevo.
              0
              1. Colaborador
                Hola,

                Para evitar errores de nombres de variable, ve a 'opciones / editor' (del VBE) y marca 'Declaración de variables obligatoria'
                Todos tus módulos comenzarán con Opción Explícita y no podrás ingresar un nombre no declarado.

                eric
                0
                1. Gracias por el consejo.
                  0
              2. Hola,

                También quisiera eliminar las filas vacías de mi tabla y por eso he copiado exactamente lo que se dijo. Sin embargo, aunque la macro funciona, también tengo este mensaje de error... (he reemplazado "fist" por "first", y aún utilizando la última macro Suplignvides(), tengo este mensaje.

                Pregunta adicional: idealmente, me gustaría eliminar todas las filas vacías de mi hoja de cálculo, excepto aquellas seguidas de una fila cuya primera celda no esté vacía. He intentado con bucles "if" que no funcionan en absoluto, así que supongo que hay una mejor manera similar a la mencionada anteriormente.

                ¡Muchas gracias por tu ayuda!
                0