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

Resuelto
Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   -  
 camanagro -
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. Le Pingou Mensajes publicados 12274 Fecha de registro   Estado Colaborador Última intervención   1 476
     
    Hola,
    Aprovecho para cambiar [Empty] por [0].
    --
    Saludos.
    El Pingüino
    2
    1. Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   6
       
      ¿Por qué? Eso no cambia nada a mi problema.
      0
  2. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    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
  3. Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   6
     
    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
  4. Charles-Daniel Mensajes publicados 12 Estado Miembro 1
     
    y luego poner

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

    Buenas noches
    1
  5. Le Pingou Mensajes publicados 12274 Fecha de registro   Estado Colaborador Última intervención   1 476
     
    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
  6. Charles-Daniel Mensajes publicados 12 Estado Miembro 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
  7. Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   6
     
    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
  8. eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
     
    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. Mrfrize Mensajes publicados 197 Fecha de registro   Estado Miembro Última intervención   6
       
      Gracias por el consejo.
      0
  9. camanagro
     
    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