Como usar para a próxima cada laços com coleções em vba excel 2016

VBA suporta ainda um outro tipo de looping no Excel 2016: looping através de cada objeto em uma coleção de objetos. A coleção, como você deve saber, é composto de uma série de objetos do mesmo tipo. Por exemplo, o Excel tem uma coleção de todos os livros abertos (a coleção Workbooks), e cada livro tem uma coleção de planilhas (a coleção planilhas).

Video: #45 - Curso de Macros e Excel VBA - Caixa de Listagem ou ListBox

Quando você precisa para percorrer cada objeto em uma coleção, use o For Each-Next estrutura. O exemplo a seguir circula através de cada folha de cálculo no livro activo e suprime a folha de cálculo, se ele está vazio:

Sub DeleteEmptySheets () Dim WkSht Como WorksheetApplication.DisplayAlerts = FalseFor Cada WkSht Em ActiveWorkbook.WorksheetsIf WorksheetFunction.CountA (WkSht.Cells) = 0 ThenWkSht.DeleteEnd IfNext WkShtApplication.DisplayAlerts = TrueEnd Sub

Neste exemplo, a variável WkSht é uma variável de objecto que representa cada folha de cálculo no livro. Nada é especial sobre o nome da variável WkSht- você pode usar qualquer nome de variável que você gosta.

O código de ciclos através de cada folha de cálculo e determina uma folha vazia por contagem das células preenchidas. Se essa contagem é zero, a folha está vazio, e é excluído. Observe que a configuração DisplayAlerts está desligado enquanto o loop está fazendo a sua coisa. Sem essa declaração, Excel aparece um aviso cada vez que uma folha está prestes a ser excluído.

Se todas as planilhas na pasta de trabalho estão vazios, você recebe um erro quando Excel tenta excluir a única folha. Normalmente, você poderia escrever código para lidar com essa situação.

Video: #41 - Curso de Macros e Excel VBA - Botão de Opção



Aqui está um outro para cada-Next exemplo. Este procedimento utiliza um circuito para esconder todas as folhas de pasta de trabalho activa, excepto a folha activa.

Sub HideSheets () Dim Sht Como WorksheetFor Cada Sht Em ActiveWorkbook.WorksheetsIf Sht.Name lt; gt; ActiveSheet.Name ThenSht.Visible = xlSheetHiddenEnd IfNext ShtEnd Sub

O procedimento HideSheets verifica o nome da folha. Se não for o mesmo que o nome da folha activa, a folha está escondido. Observe que a propriedade Visible não é booleana. Esta propriedade pode realmente assumir qualquer um três valores e Excel fornece três constantes embutidas. Se você está curioso sobre a terceira possibilidade (xlVeryHidden), verifique o sistema de Ajuda.

O que fica escondido deve, eventualmente, obter unhidden, então aqui está uma macro que unhides todas as planilhas na pasta de trabalho ativa:

Sub UnhideSheets () Dim Sht Como WorksheetFor Cada Sht Em ActiveWorkbook.WorksheetsSht.Visible = xlSheetVisibleNext ShtEnd Sub

Não surpreendentemente, você pode criar laços for aninhados Cada de próxima. O procedimento CountBold percorre todas as células do intervalo usado em cada planilha em cada livro aberto e exibe uma contagem do número de células que são formatados como negrito:

Sub CountBold () Dim WBook Como WorkbookDim WSheet Como WorksheetDim celular Como RangeDim Cnt Como Longfor Cada WBook Em WorkbooksFor Cada WSheet Em WBook.WorksheetsFor cada célula WSheet.UsedRangeIf Cell.Font.Bold = True Então Cnt = Cnt + 1Next CellNext WSheetNext WBookMsgBox Cnt & “As células negrito encontrado” End Sub

Publicações relacionadas