我有一个问题,在Excel中循环遍历单元格,我必须将每个单元格的值填充到SAP中,
但是我不能让它工作,因为在结束时细胞返回为空。
这是我的代码
Sub ClearingTest()
If Not IsObject(SAPApp) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(SAPConnection) Then
Set SAPCon = SAPApp.Children(0)
End If
If Not IsObject(session) Then
Set session = SAPCon.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session, "on"
WScript.ConnectObject SAPApp, "on"
End If
LastRow = ThisWorkbook.Sheets("Auto Post").cells(Rows.Count, "N").End(xlUp).row
Dim rng As Range
Dim cell As Range
Dim cell2 As Range
For Each cell In Range("N:N")
If (cell.Value = "ZERO BALANCE" Or cell.Value = "SHORTPAYMENT" Or cell.Value = "ON ACCOUNT" Or cell.Value = "WRITE OFF") Then
cell.Offset(1).EntireRow.Insert
End If
LastRow = ThisWorkbook.Sheets("Auto Post").cells(Rows.Count, "N").End(xlUp).row
If cell.Value = "ZERO BALANCE" Then
cell.Select
Range("I" & ActiveCell.row).Select
If Selection.End(xlUp).Value = "Amount in doc. curr." Then
Selection.End(xlUp).Offset(1, 0).Select
ElseIf Not Selection.End(xlUp).Value = "Amount in doc. curr." Then
Selection.End(xlUp).Select
End If
Range("B" & ActiveCell.row).Select
CoCD = Worksheets("Auto Post").Range("C3").Value
PstDate = Worksheets("Auto Post").Range("D3").Value
PeriodYear = Worksheets("Auto Post").Range("E3").Value
PstKey = Worksheets("Auto Post").Range("D5").Value
Payer = Worksheets("Auto Post").Range("B" & ActiveCell.row).Value
Amount = Worksheets("Auto Post").Range("J5").Value
Curr = Worksheets("Auto Post").Range("F3").Value
Text = Worksheets("Auto Post").Range("L" & ActiveCell.row).Value
RCD = Worksheets("Auto Post").Range("N5").Value
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/NF-32"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/sub:SAPMF05A:0131/radRF05A-XPOS1[2,0]").Select
session.findById("wnd[0]/usr/ctxtRF05A-AGKON").Text = Payer
session.findById("wnd[0]/usr/ctxtBKPF-BUDAT").Text = PstDate
session.findById("wnd[0]/usr/txtBKPF-MONAT").Text = PeriodYear
session.findById("wnd[0]/usr/ctxtBKPF-BUKRS").Text = CoCD
session.findById("wnd[0]/usr/ctxtBKPF-WAERS").Text = Curr
session.findById("wnd[0]/usr/ctxtRF05A-AGUMS").Text = "OA"
session.findById("wnd[0]/usr/sub:SAPMF05A:0131/radRF05A-XPOS1[2,0]").SetFocus
session.findById("wnd[0]").sendVKey 2
session.findById("wnd[0]/tbar[1]/btn[7]").press
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/sub:SAPMF05A:0710/radRF05A-XPOS1[2,0]").Select
session.findById("wnd[0]/usr/ctxtRF05A-AGKON").Text = ""
session.findById("wnd[0]/usr/sub:SAPMF05A:0710/radRF05A-XPOS1[2,0]").SetFocus
session.findById("wnd[0]").sendVKey 2
'Loop Document number
For Each cell2 In Range("D" & ActiveCell.row)
If cell2 = Empty Then GoTo nextstep:
session.findById("wnd[0]/usr/sub:SAPMF05A:0731/txtRF05A-SEL01[0,0]").Text = cell2
session.findById("wnd[0]/usr/sub:SAPMF05A:0731/txtRF05A-SEL01[0,0]").caretPosition = 9
session.findById("wnd[0]").sendVKey 0
cell2.Offset(1, 0).Select
Next cell2
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[16]").press
session.findById("wnd[0]/usr/tabsTS/tabpREST").Select
session.findById("wnd[0]/mbar/menu[0]/menu[1]").Select
End If
Next cell
End Sub
这里的问题是在For Each cell2 In Range("D" & ActiveCell.row)
处,即使在我使用cell2.Offset(1, 0).Select
选择下一行之后,cell2也不能识别下一行中的新值。
我也不能使用范围(“D6”),因为在循环中的每一个,由于当下一个循环,它将选择新的数据后,空白单元格,如下图。
谢谢。
2条答案
按热度按时间6bc51xsx1#
EDIT-更新为循环D列中的所有值,从D 6开始
这应该可以工作:
ujv3wf0j2#
从你的问题中看不出当你到达空白的第11和12行时你想做什么。你想宏停止吗?或者你想它继续到第13行?
正如braX上面所说,
Range("D" & ActiveCell.row)
只是一个单元格,所以你不能循环遍历它。你需要定义你想要循环遍历的单元格范围。下面可能是你想要的:我已经注解掉了你选择下一个单元格的那一行,因为它可能是不必要的。如果你真的需要在Excel中选择,你可以取消注解,否则你可以删除它。