Vba 错误id找不到控件

Vba 错误id找不到控件,vba,sap-gui,Vba,Sap Gui,我刚开始学习SAP GUI脚本,无法理解宏记录不正确的原因 我试图一次记录事务的所有步骤。但每次我这样做时,脚本只包含运行事务的行之前的部分。其余步骤不记录 我决定分别记录两个部分并手动组合它们。但它仍然不起作用 宏仅运行“/oCS15”事务,然后停止并返回错误消息: id找不到控件。第20行,字符1 有人能建议如何解决问题吗?我真的希望继续这个项目的这一部分,并假设它只是一个小问题。请帮忙 我有以下脚本: 如果不是IsObject(应用程序),则 设置SapGuiAuto=GetObjec

我刚开始学习SAP GUI脚本,无法理解宏记录不正确的原因

  • 我试图一次记录事务的所有步骤。但每次我这样做时,脚本只包含运行事务的行之前的部分。其余步骤不记录

  • 我决定分别记录两个部分并手动组合它们。但它仍然不起作用

  • 宏仅运行“/oCS15”事务,然后停止并返回错误消息:

    id找不到控件。第20行,字符1

    有人能建议如何解决问题吗?我真的希望继续这个项目的这一部分,并假设它只是一个小问题。请帮忙

    我有以下脚本:

    如果不是IsObject(应用程序),则
    设置SapGuiAuto=GetObject(“SAPGUI”)
    设置应用程序=SapGuiAuto.GetScriptingEngine
    如果结束
    如果不是IsObject(连接),则
    设置连接=应用程序.Children(0)
    如果结束
    如果不是IsObject(会话),则
    设置会话=连接。子级(0)
    如果结束
    如果是IsObject(WScript),则
    WScript.ConnectObject会话,“打开”
    WScript.ConnectObject应用程序,“打开”
    如果结束
    session.findById(“wnd[0]”)。最大化
    session.findById(“wnd[0]/tbar[0]/okcd”).text=“/oCS15”
    session.findById(“wnd[0]”)。sendVKey 0
    session.findById(“wnd[0]/usr/chkRC29L DIRKT”)。selected=true
    session.findById(“wnd[0]/usr/ctxtRC29L MATNR”).text=“edg001008”
    session.findById(“wnd[0]/usr/chkRC29L DIRKT”).setFocus
    session.findById(“wnd[0]”)。sendVKey 5
    session.findById(“wnd[0]/usr/ctxtRC29L-WERKS”).text=“0600”
    session.findById(“wnd[0]/usr/ctxtRC29L-WERKS”).setFocus
    session.findById(“wnd[0]/usr/ctxtRC29L-WERKS”).caretPosition=4
    session.findById(“wnd[0]”)。sendVKey 8
    session.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell”).currentCellColumn=“DOBJT”
    session.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell”)。selectedRows=“0”
    session.findById(“wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell”)。双击当前单元格
    session.findById(“wnd[0]/usr/tabsTS_ITEM/tabpPHPT/ssubpage:SAPLCSDI:0830/btnP_BEZIEHUNG”)。按
    session.findById(“wnd[0]/usr/cntlSOURCE/shellcont/shell”)。设置选择索引0,28
    
    我怀疑问题在于启动交易。事务同时打开新会话之前的命令“/o”

    设置session=connection.Children(0)=>它不再适用

    Set session=connection.Children(1)=>如果之前只有一个会话处于活动状态,则这是新会话

    但启动事务时,不一定要创建新会话。按如下方式运行新事务:

    ...
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").text = "/nCS15"
    session.findById("wnd[0]").sendVKey 0
    ...
    
    脚本记录器仅记录会话中的命令。如果您离开它们(请参见“/o”),录制将在此点停止

    问候,,
    ScriptMan

    这是这一行:session.findById(“wnd[0]”)。sendVKey 0或这一行:session.findById(“wnd[0]/usr/chkRC29L DIRKT”)。selected=true,我认为宏记录器正在引导您误入歧途。selected、set text、setFocus在不同的对象上运行-MATNR vs-DIRKT,您的下一个示例没有这样做,我该怎么处理这些线路呢?我对编码一无所知。@Wookies会编码我更改了代码但它不工作'session.findById(“wnd[0]/usr/chkRC29L DIRKT”).selected=true session.findById(“wnd[0]/usr/chkRC29L DIRKT”).setFocus session.findById(“wnd[0]/usr/ctxtRC29L MATNR”).text=“edg001001001008”session.findById(“wnd[0]/usr/ctxtRC29L MATNR”).setFocus'@Wookies将编写代码您知道为什么SAP recorder不在/oCS15步骤之后录制步骤吗?我试着记录整个过程,但它只记录了前两个步骤。如果我知道的话,我今天就可以睡个好觉了。;-)