O VBA Excel 2007 ajuda a acelerar o código para ocultar linhas [fechadas]

2

Estou tentando gravar um código do VBA que oculta automaticamente as linhas se um valor na linha for igual a "". Meu intervalo de valores é A37: A400. Porque o meu alcance é tão grande que o meu VbA anterior é lento e parece uma linha de cada vez. Qualquer idéia para fazer um código rápido que vai embora essa grande lista e esconda as linhas de uma forma rápida. Agora leva cerca de um minuto para esconder 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
    
por John 27.01.2014 / 14:11

2 respostas

2

Tente adicionar Application.ScreenUpdating = False antes do código de ocultação e adicione Application.ScreenUpdating = True após o código de ocultação. Normalmente, esse truque acelera a maioria das macros VBA em cerca de 10x porque o aplicativo não precisa continuar sendo redesenhado enquanto o código é executado.

Isso deve ajudar no seu caso, porque você está verificando cada célula individualmente e ocultando a linha individualmente versus fazendo uma ocultação em lote das linhas.

    
por 10.03.2014 / 02:50
1

Eu não vejo como o 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á false. A primeira linha diz "se a célula não está 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 quanto ao funcionamento do seu código - suspeito que há 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

Tenho 1600 linhas, demora cerca de 5 segundos para executar

    
por 27.01.2014 / 14:41