Dúvida VBA - Do While - sair do laço quando não existir a condição


#1

Bom dia!
Gostaria que me ajudassem, por favor, em um loop como faço para ele sair quando a condição não existe?
Sou novo e começando a programar agora…
Por exemplo, as condições que poderiam ser testadas seriam infinitas (i>0), no entanto, quando a condição testada não existir ou der erro ela deve sair do laço. Ou seja, o caso tem 5 condições (de 1 a 5), quando ele for testar a i=6, ele verificar que não existe essa condição e então sair do laço.
Espero que tenha ficado claro.
Agradeço a ajuda!


#2

basta inserir um if antes:

Ex.
If i < = 5 Then
Seu código
End If


#3

xlarruda, o código é para eu automatizar uma rotina no SAP (ERP).
a macro que tem que lançar o valor de i, começando de i=1.
Seria assim,
Faça i=1, meu código, próximo;
Faça i=2, meu código, próximo;
Faça i=3, meu código, próximo;
Faça i=4, meu código, próximo;
Faça i=5, meu código, próximo;
Faça i=6, é falso (não existe), saia do loop;


#4

Por favor, poste seu código completo aqui.


#5

Em síntese:

Com o SAP aberto e uma planilha aberta, onde na aba 1, célula A1 = “Pedido”, célula A2 “nº do pedido”, célula A3 “nº de outro pedido”, assim por diante. (i = nº do pedido)

O vba entra na transação SAP, vai na aba 1, célula A2, entra com o nº do pedido. Dentro da seção do pedido, ele seleciona no formulário 1 ( j ) e em um determinado campo ele coloca o valor 40, vai para o formulário 2 e em um determinado campo ele coloca novamente o valor 40, vai para o formulário 3 e assim por diante, até o ultimo formulário, não existindo o formulário 4, ele sai desse pedido e entra no outro e começa novamente.


If Not IsObject(application) Then
Set SapGuiAuto = GetObject(“SAPGUI”)
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, “on”
WScript.ConnectObject application, “on”
End If
Dim objExcel
Dim objSheet, intRow, i
Set objExcel = GetObject(, “Excel.Application”)
Set objSheet = objExcel.ActiveWorkbook.ActiveSheet

For i = 2 To objSheet.UsedRange.Rows.Count
PEDIDO = Trim(CStr(objSheet.Cells(i, 1).Value))
session.findById(“wnd[0]”).maximize
session.findById(“wnd[0]/tbar[0]/okcd”).text = “ME22N”
session.findById(“wnd[0]/tbar[0]/btn[0]”).press
session.findById(“wnd[0]/tbar[1]/btn[17]”).press
session.findById(“wnd[1]/usr/subSUB0:SAPLMEGUI:0003/ctxtMEPO_SELECT-EBELN”).text = PEDIDO
session.findById(“wnd[1]/tbar[0]/btn[0]”).press

  Para j=1 faça: 
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").setFocus
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB1:SAPLMEGUI:6000/cmbDYN_6000-LIST").key = "   "& j
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0015/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT8").select
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT8/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1333/ssubSUB0:SAPLV69A:6201/tblSAPLV69ATCTRL_KONDITIONEN/txtKOMV-KBETR[3,0]").text = "40"
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT8/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1333/ssubSUB0:SAPLV69A:6201/tblSAPLV69ATCTRL_KONDITIONEN/txtKOMV-KBETR[3,0]").setFocus
session.findById("wnd[0]/usr/subSUB0:SAPLMEGUI:0019/subSUB3:SAPLMEVIEWS:1100/subSUB2:SAPLMEVIEWS:1200/subSUB1:SAPLMEGUI:1301/subSUB2:SAPLMEGUI:1303/tabsITEM_DETAIL/tabpTABIDT8/ssubTABSTRIPCONTROL1SUB:SAPLMEGUI:1333/ssubSUB0:SAPLV69A:6201/tblSAPLV69ATCTRL_KONDITIONEN/txtKOMV-KBETR[3,0]").caretPosition = 16
session.findById("wnd[0]").sendVKey 0
  Fazer isso até existir j, senão saia.

session.findById(“wnd[1]/tbar[0]/btn[9]”).press
Next


#6

Tenta Assim:

For i = 2 To objSheet.UsedRange.Rows.Count
On error goto Out_loop
'o código aqui
Next
Out_loop:

A idéia é que, se em alguma repetição der erro, ele pule pra fora do loop logo que isso acontecer…