При частом написании фцнкций и макросов для взаимодействия с SAP GUI нам постоянно нужно в начале кода получить объект session
Чтобы упростить задачу и не писать постоянно код ля подключения к SAP можно вывести его в модуль книги и вызывать его по необходимости. Вот функция в модуль книги:
Function GetSAPSession(Optional ByVal sessionIndex As Integer = 0) As Object
Dim SapGuiAuto As Object
Dim SAPApp As Object
Dim SAPCon As Object
Dim currentSession As Object
Dim i As Integer
On Error GoTo ErrorHandler
Set SapGuiAuto = GetObject("SAPGUI")
Set SAPApp = SapGuiAuto.GetScriptingEngine
' Проверяем, есть ли вообще открытые соединения
If SAPApp.Children.Count = 0 Then
MsgBox "Нет открытых соединений SAP.", vbExclamation
Exit Function
End If
' Подключаемся к первому серверу
Set SAPCon = SAPApp.Children(0)
' Проверяем есть ли сессия с таким номером
If SAPCon.Children.Count <= sessionIndex Then
MsgBox "Сессия №" & sessionIndex & " не найдена. " & vbCrLf & _
"Доступно окон: " & SAPCon.Children.Count, vbExclamation
Exit Function
End If
' Перебираем все открытые окна по очереди и берем то, которое совпадает по счету
i = 0
For Each currentSession In SAPCon.Children
If i = sessionIndex Then
Set GetSAPSession = currentSession
Exit Function
End If
i = i + 1
Next
Exit Function
ErrorHandler:
MsgBox "Ошибка при подключении к SAP: " & Err.Description, vbCritical
Set GetSAPSession = Nothing
End Function
Вызываем из нашего макроса/функции:
Sub test ()
Dim session As Object
Set session = GetSAPSession
' Ваш код
End Sub