При частом написании фцнкций и макросов для взаимодействия с 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
Add comment