Excel VBA中的SAP GUI脚本-错误91(对象变量…)

Excel VBA中的SAP GUI脚本-错误91(对象变量…),excel,vba,sap-gui,Excel,Vba,Sap Gui,我正在尝试通过Excel VBA连接到SAP以运行录制的宏 当它到达实际SAP代码的开头时,它将 运行时错误'91' 在线session.FindById(“wnd[0]”)上。最大化 如果我删除该行,则每个会话行都有相同的问题 我核实了参考资料和声明 我以VBS脚本的形式运行它,它运行正常 在运行代码之前,我已登录到SAP会话 appl在本地窗口的值中不包含任何内容。在包含GUI应用程序的类型上 以下是代码的剪报: Private子命令按钮1\u单击() 将表名设置为字符串 如果TextBox

我正在尝试通过Excel VBA连接到SAP以运行录制的宏

当它到达实际SAP代码的开头时,它将

运行时错误'91'

在线
session.FindById(“wnd[0]”)上。最大化

如果我删除该行,则每个会话行都有相同的问题

我核实了参考资料和声明

我以VBS脚本的形式运行它,它运行正常

在运行代码之前,我已登录到SAP会话

appl
在本地窗口的值中不包含任何内容。在包含GUI应用程序的类型上

以下是代码的剪报:

Private子命令按钮1\u单击()
将表名设置为字符串
如果TextBox1=“”,则
如果不是IsObject(应用),则
设置SapGuiAuto=GetObject(“SAPGUI”)
设置appl=SapGuiAuto.GetScriptingEngine
如果结束
如果不是IsObject(连接),则
设置连接=应用子项(0)
如果结束
如果不是IsObject(会话),则
设置会话=连接。子级(0)
如果结束
如果是IsObject(WScript),则
WScript.ConnectObject会话,“打开”
WScript.ConnectObject应用程序,“打开”
如果结束
session.FindById(“wnd[0]”)。最大化
session.FindById(“wnd[0]/tbar[0]/okcd”).Text=“Stock01”
session.FindById(“wnd[0]/tbar[0]/btn[0]”。按
session.FindById(“wnd[0]/usr/ctxtS_MATNR-LOW”).Text=“566666”
session.FindById(“wnd[0]/usr/ctxtS_MATNR-HIGH”).Text=“5666666”
session.FindById(“wnd[0]/usr/ctxtS_-WERKS-LOW”).Text=“1111”
session.FindById(“wnd[0]/usr/ctxtS_-WERKS-HIGH”).Text=“1045”
session.FindById(“wnd[0]/usr/ctxtS_WERKS-HIGH”).SetFocus
session.FindById(“wnd[0]/usr/ctxtS_-WERKS-HIGH”)。caretPosition=4
session.FindById(“wnd[0]/tbar[1]/btn[8]”。按
session.FindById(“wnd[0]/usr/cntlYCONTAINER/shellcont/shell”)。按工具栏上下文按钮“&MB_导出”
session.FindById(“wnd[0]/usr/cntlYCONTAINER/shellcont/shell”)。选择ContextMenuItem“&XXL”
session.FindById(“wnd[1]/tbar[0]/btn[0]”。按
session.FindById(“wnd[1]/usr/ctxtDY_PATH”).Text=“C:\Documents\SAP\u GUI\u Code”
session.FindById(“wnd[1]/usr/ctxtDY_FILENAME”).Text=“Stock.XLSX”
session.FindById(“wnd[1]/usr/ctxtDY_FILENAME”).caretPosition=11
session.FindById(“wnd[1]/tbar[0]/btn[11]”。按
session.FindById(“wnd[0]/tbar[0]/btn[3]”。按
session.FindById(“wnd[0]/tbar[0]/btn[3]”。按
出口接头

您说
appl
不包含任何内容。因此,
会话
也不包含任何内容是正常的,因此使用变量时会出现错误91

正如@GSerg在对话中所说:

这是因为IsObject确定变量是否具有对象类型,而不是它是否包含对象的实例。特别是,IsObject(Nothing)是正确的。您想用“无”测试替换所有IsObject调用

因此,第一行应该是:

如果appl为空,则
设置SapGuiAuto=GetObject(“SAPGUI”)
设置appl=SapGuiAuto.GetScriptingEngine
如果结束
如果连接什么都不是,那么
设置连接=应用子项(0)
如果结束
如果会话不算什么,那么
设置会话=连接。子级(0)
如果结束

评论不用于扩展讨论;此对话已结束。我可以向您推荐此链接:@ScriptMan谢谢!SAP Gui的初始设置是自动帮助的。你是个救命恩人。