Полное раскрытие информации, я не использую SAP, поэтому все, что я скажу, является чисто образованной догадкой.
После небольшого изучения вопроса у меня может появиться предложение.
Ошибка исходит непосредственно из графического интерфейса SAP и достаточно подробна, что позволяет нам делать некоторые предположения;
- Ошибка из графического интерфейса SAP, поэтому VBScript выполняется без проблем.
- Проблема, скорее всего, связана с передачей информации в графический интерфейс SAP.
Давайте попробуем устранить ошибку. С этой конкретной ошибкой мы наделены огромным количеством информации (подберем несколько ключевых);
- Модуль: Нам сообщают, из какого файла происходит эта ошибка.
- Строка: строка, в которой происходит ошибка.
- Метод: метод, в котором ошибка возникает долго с возникшей ошибкой.
- Код возврата: мы можем использовать этот код для поиска конкретного кода возврата SAP GUI. Но только в том случае, если документация достаточно подробна, чтобы ее содержать. Также можно выполнить поиск в Интернете для поиска кодов ошибок для конкретного продукта.
Вооружившись всей этой информацией, становятся очевидными две вещи;
- Метод называется
NiPGetHostByName
, что предполагает, что SAP GUI ожидает найти хост с использованием имени.
- Судя по коду в вопросе и прилагаемому снимку экрана списка соединений в SAP, значение
PRD
представляется столбцом SID, а не именем.
Итак, следует ли вам передавать имя вместо SID, поскольку кажется, что SAP GUI не работает с SID и ошибочно полагает, что PRD
является именем и, следовательно, не находит его?
Я бы предложил попробовать что-то вроде;
Option Explicit
Dim WSHShell, SAPGUIPath, SID, InstanceNo, WinTitle, Name
Set WSHShell = WScript.CreateObject("WScript.Shell")
If IsObject(WSHShell) Then
SAPGUIPath = "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\"
Name = """1. SAP ECC Production (PRD)"""
SID = "PRD"
InstanceNo = "00"
WSHShell.Exec SAPGUIPath & "sapgui.exe " & Name & " " & _
InstanceNo
WinTitle = "SAP"
While Not WSHShell.AppActivate(WinTitle)
WScript.Sleep 250
Wend
Set WSHShell = Nothing
End If