VBA Excel 2007 ajuda a acelerar o código para ocultar linhas

VBA Excel 2007 ajuda a acelerar o código para ocultar linhas

Estou tentando escrever um código VBA que oculta automaticamente as linhas se um valor na linha for igual a "". Minha faixa de valores é A37:A400. Como meu alcance é tão grande, meu VbA anterior é lento e parece uma linha de cada vez. Alguma idéia para criar um código rápido que passe por essa lista grande e oculte linhas rapidamente. No momento, leva cerca de um minuto para ocultar as linhas que são muito longas.

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

Responder1

Tente adicionar Application.ScreenUpdating = Falseum pouco antes do código de ocultação e adicione Application.ScreenUpdating = Truedepois do código de ocultação. Normalmente, esse truque acelera a maioria das macros VBA em cerca de 10x porque o aplicativo não precisa se redesenhar continuamente enquanto o código é executado.

Isso deve ajudar no seu caso, porque você está verificando cada célula individualmente e ocultando a linha individualmente em vez de ocultar as linhas em lote.

Responder2

Não vejo como seu código funciona.

Você tem as seguintes 2 linhas

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

Se a primeira linha não estiver vazia, a segunda linha sempre retornará falso. A primeira linha diz "se a célula não estiver vazia" e a próxima linha diz "se a linha estiver vazia"... Bem, já foi avaliado para não estar vazio. Portanto, você nunca deve ser capaz de ocultar a linha, então estou perdido em como seu código funciona - suspeito que haja algo mais acontecendo fora do código, mas...

No entanto, isso funciona bem na minha 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

Eu tenho 1.600 linhas, leva cerca de 5 segundos para executar

informação relacionada