0182-Dica VBA: Compreendendo a instrução Set

Vamos começar preenchendo os seguintes valores no intervalo A1:A4 de uma planilha chamada “Teste da instrução Set”
A1: “Texto”; A2: 64; A3: FALSO; A4: =NÃO.DISP().

Agora vamos para o código VBA.

Sub Exemplo_Set01()
rg = [A1:A4]
End Sub

Olhando o código, poderíamos dizer que atribuímos o intervalo [A1:A4] à variável rg?

A resposta é não…

Na verdade criamos uma variável que contém apenas os valores presentes no intervalo A1:A4.

É possível buscar qualquer um desses valores e até realizar operações com eles, mas os valores de A1:A4 permanecem inalterados. A variável é apenas um “reflexo” do conteúdo do intervalo e não o próprio intervalo.

Se tentarmos executar qualquer método ou retornar uma propriedade a partir de rg, obteremos uma mensagem de erro como resultado:

Sub Exemplo_Set01()
rg = [A1:A4]
rg.Font.Name = "Arial"
End Sub

Mensagem de erro:
Erro em tempo de execução ‘424’.
O objeto é obrigatório.

Essa mensagem significa que a variável rg não é um objeto, portanto não pode ter sua propriedade Font.Name alterada.

Para atribuir corretamente um objeto a uma variável temos que adicionar a instrução Set à linha de comando.

Sub Exemplo_Set01()
Set rg = [A1:A4]
rg.Font.Name = "Arial"
End Sub

O código acima, funciona adequadamente e a fonte do intervalo é alterada para Arial conforme desejado.

Mas qual a vantagem de fazer atribuições para variáveis se podemos trabalhar diretamente com objetos?

A primeira é a simplificação do código.

Vejamos duas versões de código.

Sub Exemplo_Set02()
With Worksheets("Teste da instrução Set").Range("A1:A4")
    .Font.ColorIndex = 3
    .Interior.ColorIndex = 10
End With

With Worksheets("Teste da instrução Set").Range("B1:B4")
    .Font.ColorIndex = 10
    .Interior.ColorIndex = 3
End With
End Sub
Sub Exemplo_Set02()
Set rg1 = Worksheets("Teste da instrução Set").Range("A1:A4")

Set rg2 = Worksheets("Teste da instrução Set").Range("B1:B4")


With rg1
    .Font.ColorIndex = 3
    .Interior.ColorIndex = 10
End With

With rg2
    .Font.ColorIndex = 10
    .Interior.ColorIndex = 3
End With
End Sub

No primeiro código tivemos que escrever todas as definições do objeto em cada laço With, ao passo que no segundo exemplo, os laços With ficaram bem mais enxutos.

Esses são exemplos simples, mas em códigos mais complexos torna-se muito melhor trabalhar com nomes de variáveis mais amigáveis e utilizá-los para manipular mais efetivamente os objetos.

A segunda vantagem é que com as variáveis objeto carregadas na memória, o processamento se torna mais veloz, o que contribui para tornar os códigos mais rápidos.

A terceira vantagem é a flexibilidade do código. Se quisermos modificar a planilha ou o intervalo no primeiro código, teremos que garantir que todas as referências sejam alteradas. Por outro lado, para realizar a mesma alteração no segundo exemplo de código, basta alterar a linha de comando que contém a instrução Set.

Sempre que trabalharmos com objetos, sendo os mais comuns Range, Worksheet e Workbook, devemos atentar para o uso dessa instrução.

Comentário:
Ao trabalharmos com variáveis objeto, é uma boa prática de programação, que, ao término da execução do código esvaziemos essas variáveis.

Sub Exemplo_Set02()
Set rg1 = Worksheets("Teste da instrução Set").Range("A1:A4")

Set rg2 = Worksheets("Teste da instrução Set").Range("B1:B4")


With rg1
    .Font.ColorIndex = 3
    .Interior.ColorIndex = 10
End With

With rg2
    .Font.ColorIndex = 10
    .Interior.ColorIndex = 3
End With

Set rg1 = Nothing

Set rg2 = Nothing

End Sub

Ao atribuirmos o “valor” Nothing às variáveis rg1 e rg2, estamos liberando a memória que havia sido reservada para elas. À medida que os códigos mais elaborados consomem recursos do sistema durante a sua execução, esse tipo de cuidado pode ocasionar uma grande diferença no tempo final de processamento.

In Excel We Trust

Marcado com: , , , ,
Publicado em Nível: Avançado

Deixe uma resposta

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

Visitas dos usuários
  • 1,969,548

Clique para assinar este blog e receber notificações de novos artigos por email.

Junte-se a 1.477 outros seguidores

Aumente sua interação

Siga-nos do twitter (@usuariosdoexcel).

Acesse o nosso fórum e compartilhe as suas dúvidas.

Curta nossa página no Facebook.

Junte-se ao grupo do LinkedIn.

Visite-nos utilizando o seu smartphone ou tablet.

Recomende este Blog
Visualizar notícias
Site monitorado:
Real Time Web Analytics

Clicky

%d blogueiros gostam disto: