Olá, amigos!
Estou automatizando as transações FB70 e FB60 no SAP usando VBA com SAP GUI Scripting. O código abre a transação, preenche os dados do cabeçalho e depois percorre as linhas de uma planilha Excel para inserir itens na tabela SAP (tblSAPLFSKBTABLE).
O problema é que o loop se perde quando:
Preciso inserir uma nova linha no SAP (botão btnROW_INSERT) — isso acontece em documentos com muitas linhas de itens.
Outro usuário não necessariamente tem a mesma quantidade de linhas visíveis na tela.
Após inserir ou rolar, os índices não correspondem mais e o loop não encontra a posição correta para continuar preenchendo.
Aqui está o trecho crítico do código:
' Loop das linhas do Excel
Dim i As Integer, sapRow As Integer
i = 4
sapRow = 0
Do While Sheets("User Input Data").Range("E" & i).Value <> "" 'Line Item
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-HKONT[1," & sapRow & "]").Text = Sheets("User Input Data").Range("P" & i).Value 'Origin GL
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/txtACGL_ITEM-WRBTR[4," & sapRow & "]").Text = Sheets("User Input Data").Range("Q" & i).Value 'Amount
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/txtACGL_ITEM-ZUONR[9," & sapRow & "]").Text = Sheets("User Input Data").Range("T" & i).Value 'Assignment
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-SGTXT[11," & sapRow & "]").Text = Sheets("User Input Data").Range("U" & i).Value 'Document Text / Invoice Description
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-VBUND[14," & sapRow & "]").Text = Sheets("User Input Data").Range("W" & i).Value 'Trading Partner / LE Recipient
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-KOSTL[17," & sapRow & "]").Text = Sheets("User Input Data").Range("Y" & i).Value 'Origin CC
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-PRCTR[27," & sapRow & "]").Text = Sheets("User Input Data").Range("X" & i).Value 'Origin PC
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-PPRCT[28," & sapRow & "]").Text = Sheets("User Input Data").Range("Z" & i).Value 'Partner PC
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-MATNR[45," & sapRow & "]").Text = Sheets("User Input Data").Range("AA" & i).Value 'Material Number
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-MWSKZ[6," & sapRow & "]").Text = Sheets("User Input Data").Range("R" & i).Value 'Origin Tax Code
session.findById("wnd[0]/usr/subITEMS:SAPLFSKB:0100/tblSAPLFSKBTABLE/ctxtACGL_ITEM-TXJCD[7," & sapRow & "]").Text = Sheets("User Input Data").Range("S" & i).Value 'Tax Jurisdiction
Call SendVKeyUntilNoAlert(session)
i = i + 1
sapRow = sapRow + 1
Loop
Mesmo tentando usar btnROW_INSERT ou rolar com verticalScrollbar.Position, o loop não acompanha corretamente a posição real da linha no SAP.
Pergunta:
Vocês sabem me ajudar a analisar/criar a melhor prática para manter o loop sincronizado com a tabela SAP quando:
- É necessário inserir novas linhas dinamicamente?
- A quantidade de linhas visíveis varia entre usuários?
Devo recalcular RowCount a cada iteração? Existe alguma forma de referenciar a última linha ou usar um método seguro para navegar na tabela sem depender de índices fixos?
Agradeço muito qualquer dica ou exemplo que possam compartilhar!