0168-Dica VBA: Instrução With

Resumindo: a instrução With evita que vc repita várias vezes o nome de uma referência.
Esta é a vantagem para você.
Mas isso também se reflete no tempo de processamento.
É como se você informasse ao VBA: “Detenha sua atenção sobre esta referência até que te informe outra referência“.
Desta forma, o VBA mantém o foco nesta referência e sabe que suas instruções dizem respeito a ela.
Vamos exemplificar com o código a seguir para realizar uma série de formatações sobre um intervalo.

Sub FormatarIntervalo()
    'Definir a cor da fonte como vermelho
    Range("A1:C12").Font.ColorIndex = 3

    'Definir a fonte como Arial
    Range("A1:C12").Font.Name = "Arial"

    'Definir o tamanho da fonte como 10
    Range("A1:C12").Font.Size = 10

    'Definir a cor de preenchimento da célula como Cinza
    Range("A1:C12").Interior.ColorIndex = 10

    'Definir o alinhamento de texto à esquerda
    Range("A1:C12").HorizontalAlignment = xlLeft

    'Definir um recuo no alinhamento
    Range("A1:C12").InsertIndent 1

    'Definir o formato numérico como percentual
    Range("A1:C12").NumberFormat = "0.00%"

End Sub

O código é completamente funcional e irá realizar exatamente o que é proposto.

Mas, ele pode ser melhorado significativamente.

Da maneira que foi escrito, durante a sua execução, o foco sobre a expressão é continuamente modificado. Funciona mais ou menos assim:

  1. O VBA carrega na memória o Range(“A1:C12”) da planilha ativa;
  2. Busca a referência da propriedade ou método a serem modificados,
  3. Verifica o novo valor a ser atribuído;
  4. Realiza a modificação;
  5. Libera a referência da memória;
  6. Segue para próxima linha;
  7. Repete a sequência de 1 a 6.

Como o VBA não sabe qual será a próxima referência, a cada linha executada ele esvazia o cache e torna a carregá-lo na execução da próxima linha.

Mas a referência neste caso é sempre a mesma, o intervalo A1:C12.

Então é melhor informar ao VBA que mantenha esta referência em foco até que seja passada uma nova referência.

É exatamente isso que a Instrução With realiza.

Vamos verificar como o código poderia ser modificado:

Sub FormatarIntervalo()
    
    With Range("A1:C12")
    
        'Definir a cor da fonte como vermelho
        .Font.ColorIndex = 3
        
        'Definir a fonte como Arial
        .Font.Name = "Arial"
        
        'Definir o tamanho da fonte como 10
        .Font.Size = 10
        
        'Definir a cor de preenchimento da célula como Cinza
        .Interior.ColorIndex = 10
        
        'Definir o alinhamento de texto à esquerda
        .HorizontalAlignment = xlLeft
        
        'Definir um recuo no alinhamento
        .InsertIndent 1
        
        'Definir o formato numérico como percentual
        .NumberFormat = "0.00%"
    
    End With
End Sub

Observem que agora o VBA está, durante todo o tempo de execução da macro, focado numa única referência. O fato dela permanecer no cache faz com que suas alterações sejam realizadas mais rapidamente, o que acelera a execução do código.

Mas podemos ir um passo além:

Sub FormatarIntervalo()
    
    With Range("A1:C12")
    
        With .Font
            'Definir a cor da fonte como vermelho
            .ColorIndex = 3
            
            'Definir a fonte como Arial
            .Name = "Arial"
            
            'Definir o tamanho da fonte como 10
            .Size = 10
        End With
        
        'Definir a cor de preenchimento da célula como Cinza
        .Interior.ColorIndex = 10
        
        'Definir o alinhamento de texto à esquerda
        .HorizontalAlignment = xlLeft
        
        'Definir um recuo no alinhamento
        .InsertIndent 1
        
        'Definir o formato numérico como percentual
        .NumberFormat = "0.00%"
    
    End With
End Sub

Vejam que aninhamos um With dentro de outro With. Desta forma o VBA sabe que irá focar na coleção Font associada ao intervalo A1:C12 e quando o With interno é concluído sabe que seu foco agora é o próprio intervalo A1:C12.

Quando estamos atentos a detalhes como estes durante o processo de criação dos nossos códigos VBA conseguimos criar códigos mais enxutos, consistentes e de execução mais rápida, fatores de sucesso para um bom programador VBA.

Abraços!

Anúncios

In Excel We Trust

Marcado com: , , , , , ,
Publicado em Nível: Avançado
3 comentários em “0168-Dica VBA: Instrução With
  1. claudia disse:

    Non mi capita mai di fare commenti sui blog che leggo, ma in questo caso faccio un’eccezione, perche’ il blog merita davvero e voglio scriverlo a chiare lettere.

  2. posso usar a instrução “WITH” para atribuir propriedades a objetos de um formulário?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: