Digamos que eu tenha uma grande rotina primária, que faz muitas coisas e chama vários outros programas.
Ao depurar, passo pelo meu programa principal com F8para que eu possa ver linha por linha o que está acontecendo.
No entanto, quando faço isso, todas as rotinas que chamo desse sub principal também são executadas. Em vez de rolar para a rotina chamada End Sub
e colocar um intervalo, existe uma maneira de fazer com que o VBA apenas execute essa rotina, mas pare quando eu voltar ao meu programa principal?
Atualmente, tenho duas maneiras de fazer isso. Adiciono uma quebra na linha após chamar uma sub, na rotina PRINCIPAL - ou - adiciono uma quebra na End Sub
linha da rotina chamada.
Por exemplo,
Sub main_program()
Dim rng As Range
Set rng = Range("A1:Z1000")
do_things rng
Dim cel As Range
For Each cel In rng.SpecialCells(xlCellTypeBlanks)
Debug.Print cel.Offset(1, 0).Value
Next cel
End Sub
Sub do_things(rng As Range)
Dim cel As Range
For Each cel In rng
If cel.Value <> "something" Then
cel.Font.Bold = True
End If
Next cel
End Sub
Portanto, ao percorrer meu programa principal linha por linha, gostaria de poder executá- do_things
lo sem precisar interromper For Each cel in rng...
, ou o End Sub
.
Eu acho que uma solução é ter o VBA automaticamente break
quando atinge uma End Sub
linha ou algo assim. Estou aberto a ideias, pesquisei e não consigo encontrar nada além das soluções atuais que mencionei acima.
(Desculpe se o título é um pouco desajeitado, não consegui pensar em uma maneira melhor de expressá-lo - fique à vontade para editar).
Existe - embora possa não ser óbvio à primeira vista.
Quando estiver nessa sub-rotina (embora funcione em qualquer rotina), vá para
Debug --> Step Out
( CTRL+SHIFT+F8).Isso realmente concluirá essa rotina e, em seguida, irá para a próxima linha no outro código, se aplicável. (Na primeira leitura, presumi que simplesmente parava aquela rotina na linha atual e voltaria para a rotina que a chamou).
Por exemplo:
.gif acima:
Edit: Um excelente comentário que eu queria adicionar para tornar esta resposta mais completa. Por @MathieuGuindon, quando a
do_things rng
linha é destacada, você pode fazerDebug --> Step Over
( SHIFT+F8) e executardo_things
completamente, e ela parará na próxima linha.