Excel VBA Loops – para cada um, para o próximo, faça enquanto, aninhado e mais

para funcionar eficazmente em VBA, você deve entender Loops.

Loops permite que você repita um bloco de código um conjunto de vezes ou repita um bloco de código em cada objeto em um conjunto de objetos.

Primeiro vamos mostrar – lhe alguns exemplos para mostrar – lhe do que os laços são capazes. Então vamos ensinar-te tudo sobre loops.

VBA Loop exemplos rápidos

para cada Loops

para cada Loops loop através de cada objeto de uma coleção, como cada folha de trabalho no workbook ou cada célula em um intervalo.

Loop Através de todas as Planilhas na pasta de trabalho

Este código irá percorrer todas as planilhas na pasta de trabalho, mostrar cada folha:

1
2
3
4
5
6
7
8

Sub LoopThroughSheets()
Dim ws Como Folha
Para Cada um ws Em Planilhas
ws.Visible = True
Seguinte
End Sub

Loop Através de Todas as Células no Intervalo

Este código será um ciclo através de um intervalo de células, teste se o valor da célula é negativo, positivo, ou zero:

Para Avançar Loops

um Outro tipo de Loop “Para” é o Ciclo Para o Seguinte. O ciclo para o próximo permite-lhe circular através dos inteiros.

Este código irá circular através dos inteiros 1 a 10, mostrando cada um com uma caixa de mensagens:

1
2
3
4
5
6

Sub ForLoop()
Dim i as Integer
Para i = 1 Para 10
MsgBox i
eu
End Sub

Enquanto Loops

Enquanto Loops loop enquanto a condição for atendida. Este código também irá circular através dos inteiros 1 a 10, exibindo cada um com uma caixa de mensagens.

1
2
3
4
5
6
7
8

Sub DoWhileLoop()
Dim n as Integer
n = 1
While n < 11
MsgBox n
n = n + 1
Repetir
End Sub

Fazer Até Ciclos

por outro lado, Faça até que os Loops vão fazer loop até que uma condição seja cumprida. Este código faz o mesmo que os dois exemplos anteriores.

1
2
3
4
5
6
7
8

Sub DoUntilLoop()
Dim n as Integer
n = 1
de Volta Até n >= 10
MsgBox n
n = n + 1
Repetir
End Sub

Vamos discutir este abaixo, mas você precisa ser extremamente cuidadoso ao criar fazer enquanto ou fazer até loops para que você não crie um loop interminável.

Construtor de Loop VBA

esta é uma imagem do” Construtor de Loop ” do nosso Premium VBA Add-in: AutoMacro. O construtor do Loop permite-lhe construir loops rápida e facilmente para circular através de diferentes objectos ou números. Você pode realizar ações em cada objeto e/ou selecionar apenas objetos que atendam a determinados critérios.

o add-in também contém muitos outros construtores de códigos, uma extensa biblioteca de código VBA, e uma variedade de ferramentas de codificação. Deve ter para qualquer desenvolvedor de VBA.

agora vamos cobrir os diferentes tipos de loops em profundidade.

VBA Para o Próximo Loop

Para o Ciclo de Sintaxe

O Loop For Next permite a você repetir um bloco de código um número especificado de vezes. A sintaxe é:

1
2
3
4
5

For Counter = Start to End
Next

Where the items in brackets are optional.

  • – Declares the counter variable. Required if Option Explicit is declared at the top of your module.
  • Counter-uma variável inteira usada para contar
  • Start – o valor inicial (ex. 1)
  • End-The end value (Ex. 10)
  • – Permite-lhe contar todos os inteiros n Em vez de todos os inteiros 1. Você também pode ir ao contrário com um valor negativo (ex. Passo-1)
  • i – – o código que irá repetir

  • próxima instrução de fecho para o próximo ciclo. Você pode incluir o contador ou não. No entanto, recomendo vivamente a inclusão do contador, uma vez que torna o seu código mais fácil de ler.se isso é confuso, não se preocupe. Vamos rever alguns exemplos:

    conte até 10

    este código contará até 10 usando um laço For-Next:

    1
    2
    3
    4
    5
    6
    7
    8

    Sub ForEach_CountTo10()
    Dim n as Integer
    Para n = 1 Para 10
    MsgBox n
    n
    End Sub

    Para o Ciclo Passo

    Contagem 10 – Somente Números pares

    Este o código vai contar até 10 apenas contando números pares:

    1
    2
    3
    4
    5
    6
    7
    8

    Sub ForEach_CountTo10_Even()
    Dim n as Integer
    Para n = 2 A 10 Passo 2
    MsgBox n
    n
    End Sub

    Observe que adicionamos o “Passo 2”. Isto diz ao laço For para “passo” através do contador por 2. Nós também podemos usar um valor de passo negativo para passo no reverso:

    para Passo – inverso do Loop

    contagem decrescente a partir de 10

    este código irá contagem decrescente a partir de 10:

    1
    2
    3
    4
    5
    6
    7
    8
    9

    Sub ForEach_Countdown_Inverse()
    Dim n as Integer
    Para n = 10 To 1 Step -1
    MsgBox n
    n
    MsgBox “Lift Off”
    End Sub

    Excluir Linhas se a célula estiver em branco

    usei mais frequentemente um passo negativo para-Loop para fazer loop através de intervalos de células, apagando linhas que cumprem certos critérios. Se fizer um loop das linhas superiores para as linhas inferiores, à medida que apagar as linhas, irá sujar o seu contador.

    Este exemplo irá apagar as linhas com células em branco (a partir da linha inferior):

    aninhado para o laço

    pode “aninhar” um para o laço dentro de outro para o laço. Usaremos aninhados para Loops para criar uma tabela de multiplicação:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    Sub Nested_ForEach_MultiplicationTable()
    Dim linha as Integer, col Como Integer
    Para linha = 1 9
    Para col = 1 9
    Células(linha + 1, col + 1).Valor = linha * col
    Seguinte col
    linha Seguinte
    End Sub

    Sair

    A Saída Para instrução permite-lhe sair de um ciclo Para o Seguinte imediatamente.

    usualmente você usaria o Exit para junto com uma instrução If, saindo do laço para o próximo se uma determinada condição for cumprida.

    Por exemplo, você pode usar um Loop para encontrar uma célula. Uma vez que essa célula é encontrada, você pode sair do loop para acelerar o seu código.

    Este código irá percorrer as linhas 1 a 1000, procurando por “erro” na coluna A. Se for encontrado, o código irá seleccionar a célula, alertá-lo para o erro encontrado, e sair do loop:

    importante: no caso de aninhados para os Loops, sair apenas para sair do actual para o Loop, não para todos os Loops activos.

    Continue para

    VBA não tem o comando “Continue” que é encontrado no Visual Basic. Em vez disso, você vai precisar usar “saída”.

    VBA para cada ciclo

    a VBA para cada ciclo irá circular através de todos os objectos numa colecção:

    • Todas as células em um intervalo
    • Todas as planilhas em uma pasta de trabalho
    • Todas as formas em uma planilha
    • Todas as pastas de trabalho abertas

    Você também pode usar Aninhados Para Cada um dos Ciclos para:

    • Todas as células de um intervalo em todas as planilhas
    • Todas as formas em todas as planilhas
    • Todas as planilhas em todas as pastas de trabalho abertas
    • e assim por diante…

    A sintaxe é:

    1
    2
    3

    For Each Object in Collection
    Next

    Where:

    For Each Cell in Range

    This code will loop through each cell in a range:

    For Each Worksheet in Workbook

    This code will loop through all worksheets in a workbook, unprotecting each sheet:

    1
    2
    3
    4
    5
    6
    7
    8
    9

    Sub ForEachSheet_inWorkbook()
    Dim ws As Worksheet
    For Each ws In Worksheets
    ws.Desproteger “senha”
    Próximo ws
    End Sub

    Para Abrir Cada pasta de trabalho

    Este código irá salvar e fechar todos os livros abertos:

    1
    2
    3
    4
    5
    6
    7
    8
    9

    Sub ForEachWB_inWorkbooks()
    Dim bm Como pasta de trabalho
    Para Cada wb Em Pastas de trabalho
    wb.Fechar As Savecanges:=True
    Seguinte wb
    End Sub

    Para Cada Forma de Planilha

    Este código irá apagar todas as formas na planilha ativa.

    1
    2
    3
    4
    5
    6
    7
    8
    9

    Sub ForEachShape()
    Dim shp Como Forma
    Para Cada shp Em ActiveSheet.Formas
    shp.Excluir
    Seguinte shp
    End Sub

    Para Cada Forma, em Cada Planilha na pasta de trabalho

    Você também pode aninhar Para Cada Loops. Aqui vamos percorrer todas as formas em todas as folhas de cálculo no manual activo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    Sub ForEachShape_inAllWorksheets()
    Dim shp Como a Forma, o ws Como Folha
    Para Cada um ws Em Planilhas
    Para Cada shp Em ws.Formas
    shp.Excluir
    Seguinte shp
    Próximo ws
    End Sub

    Para Cada um – SE Loop

    Como já mencionado antes, você pode usar uma instrução If dentro de um loop, realizando ações apenas se determinados critérios.

    este código irá esconder todas as linhas em branco num intervalo:

    VBA do Enquanto o ciclo

    o VBA do While and Do Until (ver secção seguinte) são muito semelhantes. Eles vão repetir um loop enquanto (ou até) uma condição é cumprida.

    o fazer enquanto o Loop vai repetir um loop enquanto uma condição é cumprida.

    Aqui é o While Sintaxe:

    1
    2
    3

    Condição do While
    Repetir

    , Onde:

    • Condição – A condição de teste
    • – O bloco de código para repetir

    Você também pode configurar um loop While com a Condição no final do ciclo:

    1
    2
    3

    Do
    Loop While Condition

    We will demo each one and show how they differ:

    Do While

    Here is the Do While loop example we demonstrated previously:

    1
    2
    3
    4
    5
    6
    7
    8

    Sub DoWhileLoop()
    Dim n as Integer
    n = 1
    While n < 11
    MsgBox n
    n = n + 1
    Repetir
    End Sub

    Loop enquanto

    Agora vamos executar o mesmo procedimento, excepto que vamos mover a condição para o fim do loop:

    1
    2
    3
    4
    5
    6
    7
    8

    Sub DoLoopWhile()
    Dim n as Integer
    n = 1
    Voltar
    MsgBox n
    n = n + 1
    Loop While n < 11
    End Sub

    VBA Loop do until

    de Volta Até Loops vai repetir um loop até que uma determinada condição é cumprida. A sintaxe é essencialmente o mesmo como o While loops:

    1
    2
    3

    until Condição
    Repetir

    e da mesma forma, a condição pode ir no início ou no final do ciclo:

    1
    2
    3

    Do
    Loop Until Condition

    Do Until

    This do Until loop will count to 10, like our previous examples

    1
    2
    3
    4
    5
    6
    7
    8

    Sub DoUntilLoop()
    Dim n as Integer
    n = 1
    de Volta Até n > 10
    MsgBox n
    n = n + 1
    Repetir
    End Sub

    Loop until

    Este Ciclo Até que o loop vai contar até 10:

    1
    2
    3
    4
    5
    6
    7
    8

    Sub DoLoopUntil()
    Dim n as Integer
    n = 1
    Voltar
    MsgBox n
    n = n + 1
    Loop Até que n > 10
    End Sub

    Sair do Loop

    Semelhante ao uso de Sair Para sair de um Loop For, utilizar a Saída do comando para sair de um Loop imediatamente

    1
    Sair Fazer

    Aqui está um exemplo de Saída o que Fazer:

    Final ou Quebrar o Loop

    Como mencionado acima, você pode usar a Saia ou Saia de Fazer para sair loops:

    1
    Exit For
    1
    Exit Do

    However, these commands must be added to your code before you run o teu loop.

    Se estiver a tentar “quebrar” um ciclo que está a correr de momento, poderá tentar carregar em ESC ou em CTRL + pausa no teclado. No entanto, isto pode não funcionar. Se não funcionar, terá de esperar que o seu ciclo termine ou, no caso de um ciclo infinito, usar CTRL + ALT + Delete para forçar o fecho do Excel.

    é por isso que eu tento evitar fazer loops, é mais fácil criar acidentalmente um loop infinito forçando você a reiniciar o Excel, potencialmente perdendo seu trabalho.

    mais exemplos de Loop

    Loop através das linhas

    Isto irá percorrer todas as linhas de uma coluna:

    Loop Através de Colunas

    Este irá percorrer todas as colunas em uma linha:

    Loop Através de Arquivos em uma Pasta

    Este código irá percorrer todos os arquivos em uma pasta, criar uma lista:

    Loop Através de Matriz

    Este código irá percorrer a matriz ‘arrList’:

    1
    2
    3

    Para i = LBound(arrList) To UBound(arrList)
    MsgBox arrList(i)
    eu

    A função LBound recebe o “limite inferior” da matriz e UBound recebe o “limite superior”.

    Loops in Access VBA

    a maioria dos exemplos acima também funcionará no Access VBA. No entanto, no Access, nós loop através do objeto Recordset ao invés do objeto Range.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    Sub LoopThroughRecords()
    On Error Resume Next
    Dim dbs Como Banco de dados
    Dim rst Como o conjunto de registos
    Definir dbs = CurrentDb
    Set rst = dbs.OpenRecordset(“tblClients”, dbOpenDynaset)
    With rst
    .MoveLast
    .MoveFirst
    Do Until .EOF = True
    MsgBox (rst.Fields(“ClientName”))
    .MoveNext
    Loop
    End With
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing
    End Sub



Deixe uma resposta

O seu endereço de email não será publicado.