使用VBA for SAP GUI脚本比较excel中的2个单元格
目前,我有一个脚本,可以从excel工作表复制数据并将其粘贴到SAP中的事务代码scal中 我的代码所做的是按每个ID(例如AA/AB)过滤日历选择,然后将开始日期和结束日期的数据复制到scal ID中。保存更改,然后移动到下一个ID 假设我有一个excel工作表,其中有多个相同日历ID的条目。我可以如何让excel检查下一行是否与当前行具有相同的日历ID,然后,复制并粘贴相同ID的开始/结束日期,而不是保存,然后再移到下一行 tldr:比较当前列和下面的列;如果两列相同,则继续更改;否则保存并返回 代码如下:使用VBA for SAP GUI脚本比较excel中的2个单元格,excel,vba,sap-gui,Excel,Vba,Sap Gui,目前,我有一个脚本,可以从excel工作表复制数据并将其粘贴到SAP中的事务代码scal中 我的代码所做的是按每个ID(例如AA/AB)过滤日历选择,然后将开始日期和结束日期的数据复制到scal ID中。保存更改,然后移动到下一个ID 假设我有一个excel工作表,其中有多个相同日历ID的条目。我可以如何让excel检查下一行是否与当前行具有相同的日历ID,然后,复制并粘贴相同ID的开始/结束日期,而不是保存,然后再移到下一行 tldr:比较当前列和下面的列;如果两列相同,则继续更改;否则保存
Sub Main()
Dim row As Integer
Dim Session
'1. System name entry
sSystemName = sSystemName_EntrySTD()
'2. Connect to open SAP session
If bSessionConfirmSTD(Session, sSystemName) = False Then
MsgBox sSystemName & " session is not opened", vbCritical
End
End If
'3. Display status in EXCEL
application.StatusBar = "Attached to active session"
On Error Resume Next
'4. for all rows in active sheet (Tabelle1)
row = 2
While Tabelle1.Cells(row, 1).Value <> ""
Dim s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19 As String
Dim i As Integer
'5. Get value from first column of current row
s1 = Tabelle1.Cells(row, 1).Value
s2 = Tabelle1.Cells(row, 2).Value
s3 = Tabelle1.Cells(row, 3).Value
s4 = Tabelle1.Cells(row, 4).Value
s5 = Tabelle1.Cells(row, 5).Value
s6 = Tabelle1.Cells(row, 6).Value
s7 = Tabelle1.Cells(row, 7).Value
s8 = Tabelle1.Cells(row, 8).Value
s9 = Tabelle1.Cells(row, 9).Value
s10 = Tabelle1.Cells(row, 10).Value
s11 = Tabelle1.Cells(row, 11).Value
s12 = Tabelle1.Cells(row, 12).Value
s13 = Tabelle1.Cells(row, 13).Value
s14 = Tabelle1.Cells(row, 14).Value
s15 = Tabelle1.Cells(row, 15).Value
s16 = Tabelle1.Cells(row, 16).Value
s17 = Tabelle1.Cells(row, 17).Value
s18 = Tabelle1.Cells(row, 18).Value
s19 = Tabelle1.Cells(row, 19).Value
'6. Update status in EXCEL
application.StatusBar = "Processing row " & RTrim(LTrim(Str(row))) & ": " & s1
'BEGIN Paste your script here
'===============================================================================================================
Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/tbar[0]/okcd").Text = "scal"
Session.findById("wnd[0]").sendVKey 0
Session.findById("wnd[0]/usr/radFMEN-FABKAL").Select
Session.findById("wnd[0]/usr/radFMEN-FABKAL").SetFocus
Session.findById("wnd[0]/usr/btnUPDATE").press
Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").currentCellRow = -1
Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectColumn "IDENT"
Session.findById("wnd[0]/tbar[1]/btn[38]").press
Session.findById("wnd[1]/usr/ssub%_SUBSCREEN_FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW").Text = s1
Session.findById("wnd[1]/usr/ssub%_SUBSCREEN_FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW").caretPosition = 2
Session.findById("wnd[1]").sendVKey 0
Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").currentCellColumn = ""
Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectedRows = "0"
Session.findById("wnd[0]/tbar[1]/btn[7]").press
Session.findById("wnd[0]/tbar[1]/btn[17]").press
Session.findById("wnd[0]/tbar[1]/btn[13]").press
Session.findById("wnd[1]/usr/chkTIFAB-ARBTAG").Selected = s4
Session.findById("wnd[1]/usr/ctxtTIFAB-DATUMVON").Text = s2
Session.findById("wnd[1]/usr/ctxtTIFAB-DATUMBIS").Text = s3
Session.findById("wnd[1]/usr/txtTFAIT-LTEXT").Text = s5
Session.findById("wnd[1]/usr/txtTFAIT-LTEXT").SetFocus
Session.findById("wnd[1]/usr/txtTFAIT-LTEXT").caretPosition = 11
Session.findById("wnd[1]").sendVKey 0
'===============================================================================================================
'END Paste your script here
Tabelle1.Cells(row, 15).Value = Session.findById("wnd[0]/sbar").Text
'7. Log processed entries in Tabelle1
Tabelle1.Cells(row, 16).Value = "Done"
'8. Continue with next row
row = row + 1
Wend
application.StatusBar = "Processing finished"
On Error GoTo 0
Exit Sub
info:
MsgBox "error on line " & row
End Sub
Sub-Main()
将行设置为整数
昏暗的会议
'1.系统名称条目
sSystemName=sSystemName\u EntrySTD()
“2.连接到打开的SAP会话
如果bSessionConfirmSTD(会话,sSystemName)=False,则
MsgBox sSystemName&“会话未打开”,vbCritical
终点
如果结束
'3.在EXCEL中显示状态
application.StatusBar=“已附加到活动会话”
出错时继续下一步
'4.对于活动工作表中的所有行(表1)
行=2
而Tabelle1.Cells(行,1.Value“”
尺寸s1、s2、s3、s4、s5、s6、s7、s8、s9、s10、s11、s12、s13、s14、s15、s16、s17、s18、s19作为字符串
作为整数的Dim i
'5.从当前行的第一列获取值
s1=表1.单元格(第1行).值
s2=表1.单元格(第2行).值
s3=表1.单元格(第3行).值
s4=表1.单元格(第4行).值
s5=表1.单元格(第5行).值
s6=表1.单元格(第6行).值
s7=表1.单元格(第7行).值
s8=表1.单元格(第8行).值
s9=表1.单元格(第9行).值
s10=表1.单元格(第10行).值
s11=表1.单元格(第11行).值
s12=表1.单元格(第12行).值
s13=表1.单元格(第13行).值
s14=表1.单元格(第14行).值
s15=表1.单元格(第15行).值
s16=表1.单元格(第16行).值
s17=表1.单元格(第17行).值
s18=表1.单元格(第18行).值
s19=表1.单元格(第19行).值
“6.在EXCEL中更新状态
application.StatusBar=“处理行”和RTrim(LTrim(Str(row))&”:“&s1
'开始在此处粘贴脚本
'===============================================================================================================
Session.findById(“wnd[0]”)。最大化
Session.findById(“wnd[0]/tbar[0]/okcd”).Text=“scal”
Session.findById(“wnd[0]”)。sendVKey 0
Session.findById(“wnd[0]/usr/radFMEN FABKAL”)。选择
Session.findById(“wnd[0]/usr/radFMEN FABKAL”).SetFocus
Session.findById(“wnd[0]/usr/btnUPDATE”)。按
Session.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell”)。currentCellRow=-1
Session.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell”)。选择列“IDENT”
Session.findById(“wnd[0]/tbar[1]/btn[38]”。按
Session.findById(“wnd[1]/usr/ssub%\u子屏幕\u FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW”)。Text=s1
Session.findById(“wnd[1]/usr/ssub%\u子屏幕\u FREESEL:SAPLSSEL:1105/ctxt%%DYN001-LOW”)。caretPosition=2
Session.findById(“wnd[1]”)。sendVKey 0
Session.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell”).currentCellColumn=“”
Session.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell”)。selectedRows=“0”
Session.findById(“wnd[0]/tbar[1]/btn[7]”。按
Session.findById(“wnd[0]/tbar[1]/btn[17]”。按
Session.findById(“wnd[0]/tbar[1]/btn[13]”。按
Session.findById(“wnd[1]/usr/chkTIFAB ARBTAG”)。选中=s4
Session.findById(“wnd[1]/usr/ctxtTIFAB DATUMVON”).Text=s2
Session.findById(“wnd[1]/usr/ctxtTIFAB DATUMBIS”).Text=s3
Session.findById(“wnd[1]/usr/txtTFAIT LTEXT”).Text=s5
Session.findById(“wnd[1]/usr/txtTFAIT LTEXT”).SetFocus
Session.findById(“wnd[1]/usr/txtTFAIT LTEXT”).caretPosition=11
Session.findById(“wnd[1]”)。sendVKey 0
'===============================================================================================================
'结束在此处粘贴脚本
Tabelle1.Cells(第15行).Value=Session.findById(“wnd[0]/sbar”).Text
'7.在选项卡1中记录已处理的条目
表1.单元格(第16行)。Value=“完成”
'8.继续下一行
行=行+1
温德
application.StatusBar=“处理完成”
错误转到0
出口接头
信息:
MsgBox“第行出错”&行
端接头
不知道我是否正确理解了它,实际上应该比较什么。但一个可能的解决方案可能如下所示:
. . .
'4. for all rows in active sheet (Tabelle1)
row = 2
While Tabelle1.Cells(row, 1).Value <> ""
Dim s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19 As String
Dim i As Integer
'5. Get value from first column of current row
s1 = Tabelle1.Cells(row, 1).Value
if Tabelle1.Cells(row + 1, 1).Value <> "" then
if s1 = Tabelle1.Cells(row + 1, 1).Value then row = row + 1
end if
s2 = Tabelle1.Cells(row, 2).Value
. . .
。
'4.对于活动工作表中的所有行(表1)
行=2
而Tabelle1.Cells(行,1.Value“”
尺寸s1、s2、s3、s4、s5、s6、s7、s8、s9、s10、s11、s12、s13、s14、s15、s16、s17、s18、s19作为字符串
作为整数的Dim i
'5.从当前行的第一列获取值
s1=表1.单元格(第1行).值
如果表1.Cells(行+1,1).Value为“”,则
如果s1=Tabelle1.Cells(行+1,1).Value,则行=行+1
如果结束
s2=表1.单元格(第2行).值
. . .
问候,,
ScriptMan请回答您的问题,并展示您迄今为止为实现您的要求所做的努力(包括您遇到了哪些错误,在哪里,或者您的代码在哪里被卡住):感谢您的留言。我已将代码添加到我的帖子中。我要做的是比较正在读取的列上的ID和下一列上的ID是否相同。① 在没有错误处理的情况下,不要在错误恢复下使用
。这只是隐藏了所有的错误,但它们仍然会发生,您只是看不到它们。它会使您失明,您无法修复代码,因为您看不到错误。移除它。② 我们现在知道你在尝试什么,但你没有说你是如何尝试实现这一目标的,以及在尝试过程中出现了什么问题?您从哪里得到错误?哪些错误?感谢您的反馈。不幸的是,我遇到的问题