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)
- 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:
12345678Sub ForEach_CountTo10()Dim n as IntegerPara n = 1 Para 10MsgBox nnEnd SubPara o Ciclo Passo
Contagem 10 – Somente Números pares
Este o código vai contar até 10 apenas contando números pares:
12345678Sub ForEach_CountTo10_Even()Dim n as IntegerPara n = 2 A 10 Passo 2MsgBox nnEnd SubObserve 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:
123456789Sub ForEach_Countdown_Inverse()Dim n as IntegerPara n = 10 To 1 Step -1MsgBox nnMsgBox “Lift Off”End SubExcluir 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:
1234567891011Sub Nested_ForEach_MultiplicationTable()Dim linha as Integer, col Como IntegerPara linha = 1 9Para col = 1 9Células(linha + 1, col + 1).Valor = linha * colSeguinte collinha SeguinteEnd SubSair
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 é:
123For Each Object in CollectionNextWhere:
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:
123456789Sub ForEachSheet_inWorkbook()Dim ws As WorksheetFor Each ws In Worksheetsws.Desproteger “senha”Próximo wsEnd SubPara Abrir Cada pasta de trabalho
Este código irá salvar e fechar todos os livros abertos:
123456789Sub ForEachWB_inWorkbooks()Dim bm Como pasta de trabalhoPara Cada wb Em Pastas de trabalhowb.Fechar As Savecanges:=TrueSeguinte wbEnd SubPara Cada Forma de Planilha
Este código irá apagar todas as formas na planilha ativa.
123456789Sub ForEachShape()Dim shp Como FormaPara Cada shp Em ActiveSheet.Formasshp.ExcluirSeguinte shpEnd SubPara 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:
1234567891011Sub ForEachShape_inAllWorksheets()Dim shp Como a Forma, o ws Como FolhaPara Cada um ws Em PlanilhasPara Cada shp Em ws.Formasshp.ExcluirSeguinte shpPróximo wsEnd SubPara 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:
123Condição do WhileRepetir, 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:
123DoLoop While ConditionWe will demo each one and show how they differ:
Do While
Here is the Do While loop example we demonstrated previously:
12345678Sub DoWhileLoop()Dim n as Integern = 1While n < 11MsgBox nn = n + 1RepetirEnd SubLoop enquanto
Agora vamos executar o mesmo procedimento, excepto que vamos mover a condição para o fim do loop:
12345678Sub DoLoopWhile()Dim n as Integern = 1VoltarMsgBox nn = n + 1Loop While n < 11End SubVBA 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:
123until CondiçãoRepetire da mesma forma, a condição pode ir no início ou no final do ciclo:
123DoLoop Until ConditionDo Until
This do Until loop will count to 10, like our previous examples
12345678Sub DoUntilLoop()Dim n as Integern = 1de Volta Até n > 10MsgBox nn = n + 1RepetirEnd SubLoop until
Este Ciclo Até que o loop vai contar até 10:
12345678Sub DoLoopUntil()Dim n as Integern = 1VoltarMsgBox nn = n + 1Loop Até que n > 10End SubSair 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
1Sair FazerAqui 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:
1Exit For1Exit DoHowever, 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’:
123Para i = LBound(arrList) To UBound(arrList)MsgBox arrList(i)euA 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.
123456789101112131415161718Sub LoopThroughRecords()On Error Resume NextDim dbs Como Banco de dadosDim rst Como o conjunto de registosDefinir dbs = CurrentDbSet rst = dbs.OpenRecordset(“tblClients”, dbOpenDynaset)With rst.MoveLast.MoveFirstDo Until .EOF = TrueMsgBox (rst.Fields(“ClientName”)).MoveNextLoopEnd Withrst.CloseSet rst = NothingSet dbs = NothingEnd Sub
i – – o código que irá repetir