VBA Excel 2007 ayuda a acelerar el código para ocultar filas

VBA Excel 2007 ayuda a acelerar el código para ocultar filas

Estoy intentando escribir un código VBA que oculte automáticamente las filas si un valor en la fila es igual a "". Mi rango de valores es A37:A400. Debido a que mi rango es tan grande, mi VbA anterior es demasiado lento y se ve una línea a la vez. ¿Alguna idea para crear un código rápido que revise esta gran lista y oculte filas rápidamente? En este momento, se tarda aproximadamente un minuto en ocultar las filas, lo cual es demasiado largo.

Sub HideRows()
    Dim cell As Range
    For Each cell In Range("A37:A400")
        If Not IsEmpty(cell) Then
            If cell.Value = "" Then
                cell.EntireRow.Hidden = True
            End If
        End If
    Next
End Sub

Respuesta1

Intente agregar Application.ScreenUpdating = Falsejusto antes de su código de ocultación y agregue Application.ScreenUpdating = Truedespués de su código de ocultación. Normalmente, este truco acelera la mayoría de las macros de VBA aproximadamente 10 veces porque la aplicación no tiene que volver a dibujarse mientras se ejecuta el código.

Esto debería ayudar en su caso porque está verificando cada celda individualmente y ocultando la fila individualmente en lugar de ocultar filas por lotes.

Respuesta2

Ni siquiera veo cómo funciona tu código.

Tienes las siguientes 2 lineas

If Not IsEmpty(cell) Then
        If cell.Value = "" Then

Si la primera línea no está vacía, la segunda línea siempre devolverá falso. La primera línea dice "si la celda no está vacía" y la siguiente línea dice "si la línea está vacía"... Bueno, ya se ha evaluado que no está vacía. Por lo tanto, nunca debería poder ocultar la fila, por lo que no sé cómo funciona su código. Sospecho que está sucediendo algo más fuera del código, pero...

Sin embargo, esto funciona bien en mi máquina.

Sub Button1_Click()
Dim cell As Range
    For Each cell In Range("A1:A1600")
        If cell.Value = "" Then
            cell.EntireRow.Hidden = True
        End If            
    Next
End Sub

Tengo 1600 filas, se necesitan aproximadamente 5 segundos para ejecutarse

información relacionada