当我在VBA(Excel)中长时间运行SAP GUI脚本时,SAP GUI会话开始变慢。如果我中断代码并重新启动它,SAP GUI会话仍然以原来的慢速运行。如果我关闭Excel并再次运行代码,SAP GUI会话仍然以慢速运行。但是,如果我关闭SAP GUI会话并重新打开它,然后运行代码(而不是关闭Excel),速度将再次回到最佳速度。
我运行下面的代码(作为测试)来查看速度的下降。当代码开始时,每个循环大约需要4秒,然而到了第300次循环,速度下降到了每个循环16秒。
这可能看起来微不足道,但我正在运行另一个代码块(太大而无法发布),它有大约3000个循环要执行,其中每个循环需要大约25秒以最佳速度执行(一旦SAP GUI开始减速,每个循环需要一分钟或更长时间)。
而不是运行一个100个循环的块,关闭SAP GUI,再次重新打开SAP GUI,然后运行下一个100个循环的块(这就是我一直在做的),有人知道是什么减慢了SAP GUI会话,如果有一种方法可以通过编程重置SAP,以便代码再次返回到最佳速度?任何帮助或指导都会非常感谢,我在网上找不到太多关于这方面的信息。
Sub runScript()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Dim count As Integer
count = 1
Do While count < 1000
Dim startDateTime As Date
startDateTime = Now
Call enterExitTransactionIW33
Cells(count, 2) = DateDiff("S", startDateTime, Now)
count = count + 1
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End Sub
Private Sub enterExitTransactionIW33()
Dim SAPGuiAuto, SAPApp, SAPConnection, SAPSession As Object
Set SAPGuiAuto = GetObject("SAPGUI")
Set SAPApp = SAPGuiAuto.GetScriptingEngine
Set SAPConnection = SAPApp.Children(0)
Set SAPSession = SAPConnection.Children(0)
SAPSession.findById("wnd[0]/tbar[0]/okcd").Text = "IW33"
SAPSession.findById("wnd[0]").sendVKey 0
SAPSession.findById("wnd[0]/usr/ctxtCAUFVD-AUFNR").Text = "80808080"
SAPSession.findById("wnd[0]").sendVKey 0
SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1100/tabsTS_1100/tabpVGUE").Select
SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpMUEB").Select
SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpKOAU").Select
SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpPARU").Select
SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpIOLU").Select
SAPSession.findById("wnd[0]/usr/subSUB_ALL:SAPLCOIH:3001/ssubSUB_LEVEL:SAPLCOIH:1101/tabsTS_1100/tabpIHKD").Select
SAPSession.findById("wnd[0]/tbar[0]/okcd").Text = "/N"
SAPSession.findById("wnd[0]").sendVKey 0
End Sub
1条答案
按热度按时间fykwrbwg1#
我也遇到了这个问题,我在任何地方都找不到答案,但我相信我找到了一个解决方案-您需要做的就是在脚本慢下来时等待1秒:
第一步是测量执行每个循环所需的时间,所以我这样计算:
根据SecondsElapsed变量,我可以看出在第10次循环之后,脚本速度变慢了,所以我需要每10次循环等待1秒。
这就解决了我的问题。