OS MELHORES VÍDEOS

 

Pesquisar

sexta-feira, 17 de janeiro de 2014

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, StringInteger 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 Plan1Plan2 e Plan3como 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:
  • wsheet é uma variável do tipo Worksheet e será utilizada dentro de nosso laço For Each;
  • lin e col são variáveis inteiras que armazenarão os valores de linha e coluna respectivamente da célula ativa na pasta de trabalho;
  • ActiveCell é do tipo Cell e faz referência à célula que esta ativa na pasta de trabalho;
  • ActiveWorkbook é do tipo Workbook e faz referência a pasta de trabalho ativa;
  • ActiveWorkbook.Worksheets é a coleção de Worksheet (planilhas) da pasta e trabalho atual;
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 oWhile ... 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:
  • clicando em Ferramentas;
  • em seguida Macro;
  • e clique em Macros.
Fazendo isso, a seguinte caixa de diálogo será mostrada:
  • Clique em Executar e veja o resultado:
Para testar a eficácia do código, tente excluirinserir 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:
  • Workbooks;
  • Worksheets;
  • Cells;
  • Shapes;
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!



Nenhum comentário:

Postar um comentário