Cavalcante Consultores – treinamento e consultoria em finanças e Excel

For Each

Cavalcante Consultores > Biblioteca de Excel > For Each

O que é?

Em VBA, a instrução For Each repete uma mesma ação por um número de vezes definido por uma coleção.

Observe sua estrutura:

[variável] é uma variável de um dos tipos de objetos válidos para a linguagem VBA no contexto do Microsoft Excel, por exemplo, String, Integer ou mesmo Workbook ou Worksheet.

[coleção] é uma variável do gênero coleção do VBA. Variáveis de coleção são como "Arrays", só que um pouco mais inteligentes.

[código] o código que tratará o uso da variável naquele contexto.

Exemplo

Utilizaremos à estrutura For Each para acessar as informações de todas as planilhas contidas em uma pasta de trabalho.

Ao abrir uma pasta de trabalho, por padrão o Microsoft Excel criar três planilhas de nomes Plan1, Plan2 e Plan3 como mostra a figura:

Estes nomes geralmente são alterados e as planilhas excluídas ou mesmo adicionadas.

O que queremos é ter acesso às informações das planilhas, não importam quantas existam e em que ordem estejam. O VBA disponibiliza coleções padrão que refletem objetos do Microsoft Excel. Para nosso caso, utilizaremos o objeto Worksheet e a coleção Worksheets.

Suponto que quiséssemos uma lista de nomes de todas as planilhas e preenche-la em nossa planilha Plan1. O código para executar a tarefa segue abaixo:

Para enteder o código acima, é preciso saber que:

Após declarar as variáveis necessárias (linhas 2, 3 e 4), o código captura as coordenadas de linha (linha 4) e coluna (linha 5) da célula ativa na pasta de trabalho para poder acessá-la posteriormente. Em seguida o código efetua o laço For Each na coleção de planilhas (linha 6 a 9).

O laço For Each sabe que deve fazer uam varredura em todos os itens contidos na coleção informada. Não é necessário incrementos ou verificações de quantidade como é o caso do laço For ... Next tradicional ou mesmo o While ... Wend. O laço For Each garante que todos os itens da coleção serão contemplados na varredura.

Em nosso código, a garantia é que as instruções das linhas 7 e 8 serão executas o número de vezes que corresponde a quantidade de planilhas existente na pasta de trabalho. A linha 7 pega o nome da planilha (propriedade Name no objeto Worksheet, representado pela variável wsheet em nosso código) e envia para a célula com base das coordenadas das variáveis lin e col. A linha 8 apenas soma 1 à variável lin para que o código "pule" para a célula logo abaixo da que acabou de ser preenchida.

Com o código pronto, faça o teste de funcionamento indo a sua planilha:

Fazendo isso, a seguinte caixa de diálogo será mostrada:

Para testar a eficácia do código, tente excluir, inserir ou renomear qualquer planilha. Logo após isso, execute o código novamente. Veja que sem mudar o código, o laço For Each conseguiu alcançar todas as planilha existentes na coleção Worksheets. O VBA junto com o Microsoft Excel disponibiliza uma série de coleções prontas para facilitar nosso trabalho. Dentre elas, algumas das mais utilizadas são:

Conforme a lógica de funcionamento do For Each, se não existir nenhum elemento na coleção, o bloco de código interno não será executado.

É importante dizer que para não haver erros no código, é requerido que o tipo da variável seja compatível com o tipo da coleção.

Pratique!