Сброс всех окон SAP бывает полезен когда нам надо начинать макрос со стартового окна выбора транзакций и чтоб окно было одно.

Вот код в модуль книги:

Sub CleanSAPEnvironment()
    Dim SapGuiAuto As Object
    Dim SAPApp As Object
    Dim SAPCon As Object
    Dim currentSession As Object
    Dim mainSession As Object
    Dim sessionsToClose As New Collection
    Dim i As Integer
    
    On Error GoTo ErrorHandler
    
    Set SapGuiAuto = GetObject("SAPGUI")
    Set SAPApp = SapGuiAuto.GetScriptingEngine
    
    If SAPApp.Children.Count = 0 Then Exit Sub
    Set SAPCon = SAPApp.Children(0)
    
    i = 0
    For Each currentSession In SAPCon.Children
        If i = 0 Then
            Set mainSession = currentSession
        Else
            sessionsToClose.Add currentSession
        End If
        i = i + 1
    Next
    
    If sessionsToClose.Count > 0 Then
        For Each currentSession In sessionsToClose
            SAPCon.CloseSession currentSession.ID
            DoEvents
        Next
    End If
    
    If Not mainSession Is Nothing Then
        With mainSession
            .FindById("wnd[0]/tbar[0]/okcd").Text = "/n"
            .FindById("wnd[0]").sendVKey 0
        End With
    End If
        On Error Resume Next
        mainSession.FindById("wnd[0]/usr/btnSTARTBUTTON").Press
    Exit Sub

ErrorHandler:
    MsgBox "Не удалось подготовить окна SAP: " & Err.Description, vbExclamation, "Внимание!"
End Sub

Вызываем его из нашего макроса/функции:

Sub test()
    CleanSAPEnvironment

    ' Наш код

End Sub
Add comment