excel - SAP 脚本随着时间的推移运行缓慢 VBA
问题描述
当我在 VBA (excel) 中长时间运行 SAP 脚本时,SAP 会话开始变慢。如果我中断代码并重新启动它,SAP 会话仍然以原来的慢速运行。如果我关闭 excel 并再次运行代码,SAP 会话仍然以慢速运行。但是,如果我关闭 SAP 会话并重新打开它,然后运行代码(不关闭 excel),速度会再次回到最佳速度。
我运行了以下代码(作为测试)以查看速度降低。当代码开始时,每个循环大约需要 4 秒,但是到第 300 个循环时,速度下降到每个循环 16 秒。
这可能看起来微不足道,但我正在运行另一个代码块(太大而无法发布),它有大约 3000 个循环要执行,其中每个循环需要大约 25 秒才能以最佳速度执行(一旦 SAP 开始,每个循环一分钟或更长时间)减速)。
与其运行一个 100 个循环块,关闭 SAP,再次重新打开 SAP,然后运行下一个 100 个循环块(这是我一直在做的),有谁知道是什么减慢了 SAP 会话以及是否有办法以编程方式重置 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
解决方案
推荐阅读
- selenium - 无法运行 selenium ide 生成的 Python 代码
- amazon-web-services - SageMaker 更新端点挂起并失败
- android-studio - 未找到适用于 Android 检测单元测试的测试
- angular - 在 RxJS 中处理错误的正确方法是什么?
- c - gcc-11 不正确可能会在未初始化的情况下使用,这似乎很难避免
- spring-integration - 如何将 WatchServiceDirectoryScanner 与 Spring Cloud Stream 文件供应商一起使用?
- jbpm - 恢复 JBPM 7.48 WorkDefinitions wid 文件以检索里程碑图标
- javascript - 在 Angular 中使用 pdfMake.js 合并多个 pdf
- mariadb - 在日期范围内或基于另一列的值强制唯一性
- python - 在字符''''(位置 1)没有可行的替代方案