Excel 如何在SAP VBA脚本中创建循环
我的VBA SAP脚本有问题。我在excel中有数据,我想通过复制和粘贴excel中的数据来执行事务代码Excel 如何在SAP VBA脚本中创建循环,excel,vba,sap-erp,Excel,Vba,Sap Erp,我的VBA SAP脚本有问题。我在excel中有数据,我想通过复制和粘贴excel中的数据来执行事务代码IW41。我在Excel中有所有的数据,比如日期、订单数量、谁做的等等,我想实现自动化。我为变量I做了一个循环,但是我得到了一个错误,我无法修复它 错误: 运行时错误“619”:应用程序定义的错误或对象定义的错误 代码如下所示 你能给我一些专业的建议或者帮我修一下吗 出现错误的IW41屏幕: 代码: Sub ConfirmPM_Nots() SystemName = "C
IW41
。我在Excel中有所有的数据,比如日期、订单数量、谁做的等等,我想实现自动化。我为变量I
做了一个循环,但是我得到了一个错误,我无法修复它
错误:
运行时错误“619”:应用程序定义的错误或对象定义的错误
代码如下所示
你能给我一些专业的建议或者帮我修一下吗
出现错误的IW41
屏幕:
代码:
Sub ConfirmPM_Nots()
SystemName = "CCP" 'change as needed or use a variable
Transaction = "SESSION_MANAGER" 'change as needed or use a variable
On Error GoTo ErrorHandler:
If Not IsObject(Sap_Applic) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set Sap_Applic = SapGuiAuto.GetScriptingEngine
End If
On Error GoTo 0
koniec:
qConnections = Sap_Applic.Connections.Count
If qConnections = 0 Then
MsgBox "No connection to SAP"
End
End If
bSession = False
For iConnectionCounter = 0 To qConnections - 1
Set Connection = Sap_Applic.Children(Int(iConnectionCounter))
If Not Connection.Description = "" Then
qSessions = Connection.Children.Count
For iSessionCounter = 0 To qSessions - 1
Set session = Connection.Children(Int(iSessionCounter))
If session.info.SystemName <> SystemName Then Exit For
If session.info.Transaction = Transaction Then
bSession = True
Exit For
End If
Next
End If
If bSession Then Exit For
Next
If Not bSession Then
MsgBox SystemName & " not available or free session not available"
End
End If
Do
i = 1
session.findById("wnd[0]").resizeWorkingPane 128, 37, False
session.findById("wnd[0]/tbar[0]/okcd").Text = "iw41"
session.findById("wnd[0]").sendVKey 0
Order = Cells(i, 1)
b = Cells(i, 2)
c = Cells(i, 3)
d = Cells(i, 4)
session.findById("wnd[0]/usr/ctxtCORUF-AUFNR").Text = Order
session.findById("wnd[0]/usr/ctxtCORUF-AUFNR").caretPosition = 7
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPLCORUTC_3100/txtAFVGD-VORNR[1,0]").SetFocus
session.findById("wnd[0]/usr/tblSAPLCORUTC_3100/txtAFVGD-VORNR[1,0]").caretPosition = 2
session.findById("wnd[0]").sendVKey 2
session.findById("wnd[0]/usr/chkAFRUD-AUERU").Selected = True
session.findById("wnd[0]/usr/chkAFRUD-LEKNW").Selected = True
session.findById("wnd[0]/usr/ctxtAFRUD-ISDD").Text = c
session.findById("wnd[0]/usr/txtAFRUD-IDAUR").Text = b
session.findById("wnd[0]/usr/ctxtAFRUD-IEDD").Text = c
session.findById("wnd[0]/usr/txtAFRUD-LTXA1").Text = d
session.findById("wnd[0]/usr/txtAFRUD-LTXA1").SetFocus
session.findById("wnd[0]/usr/txtAFRUD-LTXA1").caretPosition = 10
session.findById("wnd[0]/tbar[0]/btn[11]").press
i = i + 1
Loop
Exit Sub
ErrorHandler:
MsgBox "No connection to SAP"
End
End Sub
Sub-ConfirmPM\u Nots()
SystemName=“CCP”根据需要更改或使用变量
Transaction=“SESSION\u MANAGER”'根据需要更改或使用变量
错误转到错误处理程序时:
如果不是IsObject(Sap_Applic),则
设置SapGuiAuto=GetObject(“SAPGUI”)
设置Sap_Applic=SapGuiAuto.GetScriptingEngine
如果结束
错误转到0
科尼克:
qConnections=Sap_Applic.Connections.Count
如果qConnections=0,则
MsgBox“未连接到SAP”
终点
如果结束
bSession=False
对于iConnectionCounter=0到qConnections-1
设置连接=Sap_Applic.Children(Int(iConnectionCounter))
如果不是连接。说明=“则
qSessions=Connection.Children.Count
对于iSessionCounter=0到qSessions-1
Set session=Connection.Children(Int(iSessionCounter))
如果是session.info.SystemName SystemName,则退出
如果session.info.Transaction=事务,则
bSession=True
退出
如果结束
下一个
如果结束
如果退出,则退出
下一个
如果不是bSession,那么
MsgBox SystemName&“不可用或空闲会话不可用”
终点
如果结束
做
i=1
session.findById(“wnd[0]”)。调整工作窗格大小128、37、False
session.findById(“wnd[0]/tbar[0]/okcd”).Text=“iw41”
session.findById(“wnd[0]”)。sendVKey 0
顺序=单元(i,1)
b=单元(i,2)
c=单元(i,3)
d=单元(i,4)
session.findById(“wnd[0]/usr/ctxtCORUF AUFNR”).Text=Order
session.findById(“wnd[0]/usr/ctxtCORUF AUFNR”).caretPosition=7
session.findById(“wnd[0]”)。sendVKey 0
session.findById(“wnd[0]/usr/tblSAPLCORUTC_3100/txtAFVGD VORNR[1,0]”)。SetFocus
session.findById(“wnd[0]/usr/tblSAPLCORUTC_3100/txtAFVGD VORNR[1,0]”。caretPosition=2
session.findById(“wnd[0]”)。sendVKey 2
session.findById(“wnd[0]/usr/chkAFRUD AUERU”)。Selected=True
session.findById(“wnd[0]/usr/chkAFRUD LEKNW”)。Selected=True
session.findById(“wnd[0]/usr/ctxtAFRUD ISDD”).Text=c
session.findById(“wnd[0]/usr/txtAFRUD-IDAUR”).Text=b
session.findById(“wnd[0]/usr/ctxtAFRUD IEDD”).Text=c
session.findById(“wnd[0]/usr/txtafrad-LTXA1”).Text=d
session.findById(“wnd[0]/usr/txtafrad-LTXA1”).SetFocus
session.findById(“wnd[0]/usr/txtafrad-LTXA1”)。caretPosition=10
session.findById(“wnd[0]/tbar[0]/btn[11]”。按
i=i+1
环
出口接头
错误处理程序:
MsgBox“未连接到SAP”
终点
端接头
“iw41”
(来自session.findById(“wnd[0]/tbar[0]/okcd”)。Text=“iw41”
)仅在当前屏幕为开始菜单时有效。OK Code“/niw41”
将始终有效!因此此代码可能有效(未经测试):
我还用
resizeWorkingPane
、caretPosition
和SetFocus
对行进行了注释,因为这通常是不需要的resizeWorkingPane
将调整SAPGUI屏幕的大小,caretPosition
是文本框中光标的位置。例如,如果要替换文本,有时需要。但在这种情况下肯定不会。我想拍一张最差的照片是很困难的。。。我们看不到返回错误的黄线,这比错误本身更重要。你能编辑你的问题并复制返回错误的行吗?您好,我做了一个循环,但在这个地方的最后一个记录崩溃了:另外我还有一个问题,当没有记录时,如何使循环停止?循环应该如何终止?您在循环本身中没有While
或Until
条件,也没有Exit Do
或Exit Sub
。该循环将一直运行,直到程序崩溃。它不能在5行代码上停止。。。尝试在VBE中进行下一次修改:工具->选项->常规(选项卡),并选中“闯入类模块”。以下通道上出现错误:session.findById(“wnd[0]/usr/tblSAPLCORUTC_3100/txtAFVGD VORNR[1,0]”。SetFocus
Do
i = 1
' session.findById("wnd[0]").resizeWorkingPane 128, 37, False
' iw41 only works in the start menu. OK-Code /niw41 will always work!
session.findById("wnd[0]/tbar[0]/okcd").Text = "/niw41"
session.findById("wnd[0]").sendVKey 0
Order = Cells(i, 1)
b = Cells(i, 2).value
c = Cells(i, 3).value
d = Cells(i, 4).value
session.findById("wnd[0]/usr/ctxtCORUF-AUFNR").Text = Order
' session.findById("wnd[0]/usr/ctxtCORUF-AUFNR").caretPosition = 7
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/tblSAPLCORUTC_3100/txtAFVGD-VORNR[1,0]").SetFocus
' session.findById("wnd[0]/usr/tblSAPLCORUTC_3100/txtAFVGD-VORNR[1,0]").caretPosition = 2
session.findById("wnd[0]").sendVKey 2
session.findById("wnd[0]/usr/chkAFRUD-AUERU").Selected = True
session.findById("wnd[0]/usr/chkAFRUD-LEKNW").Selected = True
session.findById("wnd[0]/usr/ctxtAFRUD-ISDD").Text = c
session.findById("wnd[0]/usr/txtAFRUD-IDAUR").Text = b
session.findById("wnd[0]/usr/ctxtAFRUD-IEDD").Text = c
session.findById("wnd[0]/usr/txtAFRUD-LTXA1").Text = d
' session.findById("wnd[0]/usr/txtAFRUD-LTXA1").SetFocus
' session.findById("wnd[0]/usr/txtAFRUD-LTXA1").caretPosition = 10
session.findById("wnd[0]/tbar[0]/btn[11]").press
i = i + 1
Loop