24.08.2020 Views

Programando o Excel ® Vba Para Leigos - 2ª Ed 2013 NoDRM (1)

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

216 Parte III: Conceitos de Programação

Esta macro tem a vantagem de que o método Cut pode usar um argumento

que especifica o destino. Observe ainda que a faixa não foi selecionada.

O indicador de célula permanece em sua posição original.

Como fazer loop eficientemente

através de uma faixa

Muitas macros executam uma operação em cada célula de uma faixa, ou

poderiam executar ações selecionadas, com base no conteúdo de cada

célula. Geralmente, essas células incluem um loop For-Next que processa

cada célula na faixa.

O seguinte exemplo demonstra como fazer loop através de uma faixa de

células. Neste caso, a faixa é a seleção atual. Um objeto variável,

chamado Cell, refere-se à célula sendo processada. Dentro da loop

For-Next, a única declaração avalia a célula e aplica formatação em

negrito se a célula contiver um valor positivo.

Sub ProcessCells()

Dim Cell As Range

For Each Cell In Selection

If Cell.Value > 0 Then Cell.Font.Bold = True

Next Cell

End Sub

Este exemplo funciona, mas e se a seleção consistir de uma coluna ou

linha inteira? Isso não é incomum, pois o Excel permite que você realize

operações em colunas ou linhas inteiras. Em tal caso, a macro parece

demorar para sempre, pois ela faz loops através de cada célula (todas

as 1.048.576) na coluna – mesmo as células em branco. Para tornar a

macro mais eficiente, você precisa de uma maneira para processar

apenas as células que não estão em branco.

A seguinte rotina faz exatamente isso, usando o método SpecialCells

(para detalhes específicos sobre os argumentos dele, consulte o

sistema de Ajuda VBA). Esta rotina usa a palavra chave Set para criar

dois novos objetos Range: o subconjunto da seleção, que consiste de

células com constantes e o subconjunto da seleção que consiste de

células com fórmulas. A rotina processa cada um desses subconjuntos,

com o efeito líquido de pular todas as células em branco. Bem esperto,

não é?

Sub SkipBlanks()

Dim ConstantCells As Range

Dim FormulaCells As Range

Dim cell As Range

‘ Ignore erros

On Error Resume Next

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!