SAP脚本随着时间推移VBA运行速度变慢

时间:2019-01-14 09:46:39

标签: excel vba performance scripting sap

当我长时间在VBA(excel)中运行SAP脚本时,SAP会话开始变慢。如果我中断代码并再次启动它,SAP会话仍将以其慢速运行。如果我关闭excel并再次运行代码,SAP会话仍将以慢速运行。但是,如果我关闭SAP会话并重新打开它,然后运行代码(而不是关闭excel),速度将再次回到最佳速度。

我运行了以下代码(作为测试),以查看速度降低的情况。代码开始时,每个循环大约需要4秒钟,而到第300个循环为止,速度降低为每个循环16秒。

这看似微不足道,但我正在运行另一个代码块(太大而无法发布),该代码块要执行约3000个循环,其中每个循环大约需要25秒才能以最佳速度执行(每个循环一分钟或更长时间) SAP开始变慢)。

没有人知道运行SAP会话的速度减慢以及是否存在运行100个循环的块,关闭SAP,再次重新打开SAP,然后运行下一个100个循环的块(这就是我一直在做的事情)的过程。一种以编程方式重置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

0 个答案:

没有答案