GetObject("SAPGUI") 返回什么类型的对象?
What type of object is returned by GetObject("SAPGUI")?
TL;DR --------------
如果我在初始化脚本中正确声明了变量,我就无法附加到 SAPFEWSELib.GuiApplication 的 "connection" 对象。
集合 MyApplication.Children(0) 是空的,但如果我注释掉声明块,它就可以正常工作!?
TL;DR --------------
我正在尝试在我的 SAP 客户端和我的 excel 应用程序之间创建更可靠的连接。
我当前的问题是建立连接。 SAP客户端在使用其脚本录制功能时提供了示例vbscript。
If Not IsObject(MyApplication) Then
Debug.Print "yep"
Set SapGuiAuto = GetObject("SAPGUI")
Set MyApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = MyApplication.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
关于 Whosebug 的另一个问题接近于回答,但没有达到要求
计算器。com/questions/24738998/vba-using-variables-that-were-not-declared
原来的代码是here,我稍作修改使其可以在excel/vba中使用。
(我删除了 IsObject(Wscript),我不得不用 MyApplication 替换 Application)
我要做的第一件事是显式声明所有变量。
使用我在以下地址获得的代码
计算器。com/questions/19783180/get-list-of-all-properties-for-an-object
我使用 "TypeLib Information" 和函数 TypeName() 来确定每个对象类型。我试着声明如下
Dim session as GuiSession
Dim MyApplication as GuiApplication
Dim Connection as ISapConnectionTarget
Dim SapGuiAuto as object
我收到用户定义类型未定义错误。
经过一番搜索,我在这个地址找到了部分答案。
scn.sap.com/thread/3254335
我觉得手动添加 "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\sapfewse.ocx" 引用很容易出错。如果有更好的方法,请告诉我。
好的,现在我可以像这样声明并且它起作用了。
Dim MyApplication As SAPFEWSELib.GuiApplication
Dim Connection As SAPFEWSELib.GuiConnection
Dim session As SAPFEWSELib.GuiSession
Dim SapGuiAuto As Object
我不喜欢 SapGuiAuto As Object,因为它并没有真正说明它是什么,而且我无法使用 CTRL+SPACE 查看该对象的可用属性和功能(VB 我现在离不开的功能!)
关于这个对象,我只知道它有一个 .GetScriptingEngine 函数(方法?)。
在研究写这个问题时,我在 sap.com 论坛上看到了这个帖子。
scn.sap.com/thread/3448120
这里提到"GetScriptingEngine is a method of the class GuiApplication".
所以我尝试了以下声明,它似乎有效。
Dim MyApplication As SAPFEWSELib.GuiApplication
Dim Connection As SAPFEWSELib.GuiConnection
Dim session As SAPFEWSELib.GuiSession
Dim SapGuiAuto As SAPFEWSELib.GuiApplication
现在,如果我键入 "session.",则会出现可能的属性列表。
但是有一个问题!
如果我输入以下行
Debug.Print session.FindById("wnd[0]").Text
它给出了一个错误(虽然它以前工作得很好!)。
错误是 "Object variable or With bock variable not set".
如果我注释掉变量声明,它工作得很好!
在会话未声明时使用 TLI 函数我得到以下成员
DumpProperties session.FindById("wnd[0]")
这里输出 -> pastebin.mozilla.org/8882551
但是如果我 运行 正确声明会话的相同命令我得到..同样的错误
所以经过更多的研究,事实证明脚本的开头现在不一样了。
If Not IsObject(MyApplication) Then
如果 MyApplication 已使用 Dim MyApplication As SAPFEWSELib.GuiApplication
声明,则不会执行
所以我尝试在没有 IF 的情况下执行命令。
Set MyApplication = SapGuiAuto.GetScriptingEngine
Set Connection = MyApplication.Children(0)
Set session = Connection.Children(0)
这失败并在 Set MyApplication = SapGuiAuto.GetScriptingEngine
上出现 "Object variable or With bock variable not set" 错误
这个问题的解决方案是像这样创建一个新的 SapGuiAuto 实例。
Set SapGuiAuto = New SAPFEWSELib.GuiApplication
现在执行上面的代码,直到在 Set Connection = MyApplication.Children(0)
失败
错误:"The enumerator of the collection cannot find en element with the specified index"
使用以下行进行的快速测试显示,.Children 集合是空的。
For Each chld In MyApplication.Children: Debug.Print "one exists": Next
如果我当前与 SAP 断开连接,但我已连接并注释掉声明块,这与我通常会遇到的错误相同,解决了该问题。
Whosebug 上的这个答案是不祥的
计算器。com/questions/36751819/sap-gui-scripting-error-the-enumerator-of-the-collection-cannot-find-an-elemen
我不是管理员,现在是星期五晚上 10 点,向 IT 询问任何事情都是一场噩梦。希望我不必诉诸于此。
我换台电脑试试
刚试过,我得到了同样的结果。在这一点上,我不得不认输,没有一些帮助或至少晚上好好休息,我无法让它工作!
感谢任何建议或意见
我发现一些额外的链接对和我有相同道路的人非常有用。
使用 VB调试器发现 SAP GUI 属性和函数
scn.sap.com/docs/DOC-39696
SAP GUI 脚本 API 文档(我无法打开此文件,但它充满了好东西)
www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/a034a16b-3bfe-2a10-e2bb-8bd880db0b3c
SAP GUI 脚本 API:如何自动化用户交互(不幸的是我的系统缺少 "Script development tools")
scn.sap.com/docs/DOC-4614
此外,BIBS 功能可能对您有帮助,但它在我的系统上不起作用
scn.sap.com/docs/DOC-4612
我自己刚遇到这个问题,并找到了 "enumerator" 错误的解决方案。还 post 在您提到的引用的 Whosebug post 中编辑了它。
改变这个:
设置连接 = Sap_Application.Children(0)
进入这个:
设置连接 = Sap_Application.Children(1)
正如我在那里解释的那样,不确定为什么会发生这种情况,或者它意味着什么,我只是弄乱了数字并且它起作用了。
希望现在还不算太晚,否则可能会对其他人有所帮助。
此致
当我使用它时,我也得到 0 children,就好像没有连接到 SAP:
Set sapCon = New SAPFEWSELib.GuiApplication
通过使用它,它实际上起作用了:
Set sapCon = GetObject("SAPGUI").GetScriptingEngine
TL;DR --------------
如果我在初始化脚本中正确声明了变量,我就无法附加到 SAPFEWSELib.GuiApplication 的 "connection" 对象。 集合 MyApplication.Children(0) 是空的,但如果我注释掉声明块,它就可以正常工作!?
TL;DR --------------
我正在尝试在我的 SAP 客户端和我的 excel 应用程序之间创建更可靠的连接。
我当前的问题是建立连接。 SAP客户端在使用其脚本录制功能时提供了示例vbscript。
If Not IsObject(MyApplication) Then
Debug.Print "yep"
Set SapGuiAuto = GetObject("SAPGUI")
Set MyApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = MyApplication.Children(0)
End If
If Not IsObject(session) Then
Set session = Connection.Children(0)
End If
关于 Whosebug 的另一个问题接近于回答,但没有达到要求 计算器。com/questions/24738998/vba-using-variables-that-were-not-declared
原来的代码是here,我稍作修改使其可以在excel/vba中使用。 (我删除了 IsObject(Wscript),我不得不用 MyApplication 替换 Application)
我要做的第一件事是显式声明所有变量。
使用我在以下地址获得的代码 计算器。com/questions/19783180/get-list-of-all-properties-for-an-object 我使用 "TypeLib Information" 和函数 TypeName() 来确定每个对象类型。我试着声明如下
Dim session as GuiSession
Dim MyApplication as GuiApplication
Dim Connection as ISapConnectionTarget
Dim SapGuiAuto as object
我收到用户定义类型未定义错误。
经过一番搜索,我在这个地址找到了部分答案。
scn.sap.com/thread/3254335
我觉得手动添加 "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\sapfewse.ocx" 引用很容易出错。如果有更好的方法,请告诉我。
好的,现在我可以像这样声明并且它起作用了。
Dim MyApplication As SAPFEWSELib.GuiApplication
Dim Connection As SAPFEWSELib.GuiConnection
Dim session As SAPFEWSELib.GuiSession
Dim SapGuiAuto As Object
我不喜欢 SapGuiAuto As Object,因为它并没有真正说明它是什么,而且我无法使用 CTRL+SPACE 查看该对象的可用属性和功能(VB 我现在离不开的功能!)
关于这个对象,我只知道它有一个 .GetScriptingEngine 函数(方法?)。
在研究写这个问题时,我在 sap.com 论坛上看到了这个帖子。 scn.sap.com/thread/3448120
这里提到"GetScriptingEngine is a method of the class GuiApplication".
所以我尝试了以下声明,它似乎有效。
Dim MyApplication As SAPFEWSELib.GuiApplication
Dim Connection As SAPFEWSELib.GuiConnection
Dim session As SAPFEWSELib.GuiSession
Dim SapGuiAuto As SAPFEWSELib.GuiApplication
现在,如果我键入 "session.",则会出现可能的属性列表。 但是有一个问题!
如果我输入以下行
Debug.Print session.FindById("wnd[0]").Text
它给出了一个错误(虽然它以前工作得很好!)。 错误是 "Object variable or With bock variable not set".
如果我注释掉变量声明,它工作得很好!
在会话未声明时使用 TLI 函数我得到以下成员
DumpProperties session.FindById("wnd[0]")
这里输出 -> pastebin.mozilla.org/8882551
但是如果我 运行 正确声明会话的相同命令我得到..同样的错误
所以经过更多的研究,事实证明脚本的开头现在不一样了。
If Not IsObject(MyApplication) Then
如果 MyApplication 已使用 Dim MyApplication As SAPFEWSELib.GuiApplication
声明,则不会执行所以我尝试在没有 IF 的情况下执行命令。
Set MyApplication = SapGuiAuto.GetScriptingEngine
Set Connection = MyApplication.Children(0)
Set session = Connection.Children(0)
这失败并在 Set MyApplication = SapGuiAuto.GetScriptingEngine
上出现 "Object variable or With bock variable not set" 错误这个问题的解决方案是像这样创建一个新的 SapGuiAuto 实例。
Set SapGuiAuto = New SAPFEWSELib.GuiApplication
现在执行上面的代码,直到在 Set Connection = MyApplication.Children(0)
失败错误:"The enumerator of the collection cannot find en element with the specified index"
使用以下行进行的快速测试显示,.Children 集合是空的。
For Each chld In MyApplication.Children: Debug.Print "one exists": Next
如果我当前与 SAP 断开连接,但我已连接并注释掉声明块,这与我通常会遇到的错误相同,解决了该问题。
Whosebug 上的这个答案是不祥的 计算器。com/questions/36751819/sap-gui-scripting-error-the-enumerator-of-the-collection-cannot-find-an-elemen
我不是管理员,现在是星期五晚上 10 点,向 IT 询问任何事情都是一场噩梦。希望我不必诉诸于此。
我换台电脑试试
刚试过,我得到了同样的结果。在这一点上,我不得不认输,没有一些帮助或至少晚上好好休息,我无法让它工作!
感谢任何建议或意见
我发现一些额外的链接对和我有相同道路的人非常有用。
使用 VB调试器发现 SAP GUI 属性和函数 scn.sap.com/docs/DOC-39696
SAP GUI 脚本 API 文档(我无法打开此文件,但它充满了好东西) www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/a034a16b-3bfe-2a10-e2bb-8bd880db0b3c
SAP GUI 脚本 API:如何自动化用户交互(不幸的是我的系统缺少 "Script development tools") scn.sap.com/docs/DOC-4614
此外,BIBS 功能可能对您有帮助,但它在我的系统上不起作用 scn.sap.com/docs/DOC-4612
我自己刚遇到这个问题,并找到了 "enumerator" 错误的解决方案。还 post 在您提到的引用的 Whosebug post 中编辑了它。
改变这个: 设置连接 = Sap_Application.Children(0)
进入这个: 设置连接 = Sap_Application.Children(1)
正如我在那里解释的那样,不确定为什么会发生这种情况,或者它意味着什么,我只是弄乱了数字并且它起作用了。
希望现在还不算太晚,否则可能会对其他人有所帮助。
此致
当我使用它时,我也得到 0 children,就好像没有连接到 SAP:
Set sapCon = New SAPFEWSELib.GuiApplication
通过使用它,它实际上起作用了:
Set sapCon = GetObject("SAPGUI").GetScriptingEngine