从Excel中的VBA运行的SAP错误处理无法捕获异常错误。

2020-08-30 00:23发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好亲爱的Fellowes!

请问您要帮忙吗?

当我在错误中运行时,我没有收到任何代码值,并且我的代码因调试过多而崩溃

(或者我的技能还没有得到足够的发展)

我试图通过检测错误并跳转到代码的其他部分来进行管理,但并没有成功。

'质量管理交易的第一遍操作
 session.findById(" wnd [0]/tbar [0]/okcd")。Text =" qm02"'打开交易
 session.findById(" wnd [0]")。sendVKey 0'该数字来自上一个操作
 session.findById(" wnd [0]")。sendVKey 0


 session.findById(" wnd [0]/usr/tabsTAB_GROUP_10/tabp10 \ TAB11")。选择"任务"标签
 session.findById(" wnd [0]/shellcont/shell")。selectItem" 6175"," Column01"'m返回
 session.findById(" wnd [0]/shellcont/shell")。ensureVisibleHorizo​​ntalItem" 6175"," Column01"
 session.findById(" wnd [0]/shellcont/shell")。clickLink" 6175"," Column01"
 '
  可能会弹出其他窗口-自动批准。 我需要
 当我尝试按不存在的按钮时,查找是否有错误
 存在
 '跟踪1/a无自动批准。
 '跟踪2/b,并具有自动批准-
 要点1:"可疑部分开始"自动批准"
 在错误转到2
 session.findById(" wnd [1]/tbar [0]/btn [0]")。按

 '确认是否没有自动批准。 尝试按一个按钮-当崩溃时,我手动单击,但脚本中断
 session.findById(" wnd [1]/tbar [0]/btn [17]")。按
 如果存在其他操作错误,则另一次推送-如果存在具有自动批准功能的其他窗口。
 '"选择一个有效的函数"在这里我的脚本崩溃了...
 session.findById(" wnd [0]/tbar [0]/btn [11]")。按"保存
 GoTo Point3'跳到最后。
 Punkt2:"推送自动批准等。
 session.findById(" wnd [1]/usr/btnBUTTON_1")。按'是,自动批准
 session.findById(" wnd [0]/tbar [0]/btn [11]")。按"保存
 第三点:
 '剩下的部分。


在此先感谢您

-Komar,敬上

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好亲爱的Fellowes!

请问您要帮忙吗?

当我在错误中运行时,我没有收到任何代码值,并且我的代码因调试过多而崩溃

(或者我的技能还没有得到足够的发展)

我试图通过检测错误并跳转到代码的其他部分来进行管理,但并没有成功。

'质量管理交易的第一遍操作
 session.findById(" wnd [0]/tbar [0]/okcd")。Text =" qm02"'打开交易
 session.findById(" wnd [0]")。sendVKey 0'该数字来自上一个操作
 session.findById(" wnd [0]")。sendVKey 0


 session.findById(" wnd [0]/usr/tabsTAB_GROUP_10/tabp10 \ TAB11")。选择"任务"标签
 session.findById(" wnd [0]/shellcont/shell")。selectItem" 6175"," Column01"'m返回
 session.findById(" wnd [0]/shellcont/shell")。ensureVisibleHorizo​​ntalItem" 6175"," Column01"
 session.findById(" wnd [0]/shellcont/shell")。clickLink" 6175"," Column01"
 '
  可能会弹出其他窗口-自动批准。 我需要
 当我尝试按不存在的按钮时,查找是否有错误
 存在
 '跟踪1/a无自动批准。
 '跟踪2/b,并具有自动批准-
 要点1:"可疑部分开始"自动批准"
 在错误转到2
 session.findById(" wnd [1]/tbar [0]/btn [0]")。按

 '确认是否没有自动批准。 尝试按一个按钮-当崩溃时,我手动单击,但脚本中断
 session.findById(" wnd [1]/tbar [0]/btn [17]")。按
 如果存在其他操作错误,则另一次推送-如果存在具有自动批准功能的其他窗口。
 '"选择一个有效的函数"在这里我的脚本崩溃了...
 session.findById(" wnd [0]/tbar [0]/btn [11]")。按"保存
 GoTo Point3'跳到最后。
 Punkt2:"推送自动批准等。
 session.findById(" wnd [1]/usr/btnBUTTON_1")。按'是,自动批准
 session.findById(" wnd [0]/tbar [0]/btn [11]")。按"保存
 第三点:
 '剩下的部分。


在此先感谢您

-Komar,敬上

付费偷看设置
发送
4条回答
N-Moskvin
1楼-- · 2020-08-30 00:57

我将此代码段作为模板;

'检查"意外"弹出窗口
 不做时session.findById(" wnd [1]",False)什么都没有
     如果不是session.findById(" wnd [1]/usr/btnBUTTON_2",False)则无
         session.findById(" wnd [1]/usr/btnBUTTON_2")。按
     万一
     如果不是session.findById(" wnd [1]/usr/btnSPOP-OPTION2",False)则为空
         session.findById(" wnd [1]/usr/btnSPOP-OPTION2")。press
     万一
 循环
 

您需要适应的有趣的变量组件是此部分。

如果不是session.findById(" wnd [1]/usr/btnBUTTON_2",False)没什么

将" session.findById(" wnd [1]/usr/btnBUTTON_2"")替换为您需要检查其存在的任何数据点。

在您所处的情况下,这可能是一种有用的技术,请删除所有goto语句,但最后可能要删除一个实际的错误处理程序,因为您"应该"解决可能会出现的所有接口选项。

一个更复杂的例子:

将弹出菜单另存为SAPFEWSELib.GuiModalWindow

 '检查弹出窗口,IE表是否跨客户端,已锁定等
     如果不是session.FindById(" wnd [1]",False)那么什么都没有
         设置pop = session.FindById(" wnd [1]")
         如果InStr(pop.text,"锁定数据")> 0,则
             '表已锁定
             调用SetScriptStatus(pop.text)
             session.FindById(" wnd [1]/usr/btnBUTTON_2")。按
             session.FindById(" wnd [0]/tbar [0]/btn [15]")。press
             session.FindById(" wnd [0]/tbar [0]/btn [15]")。press
             结束
            
         ElseIf InStr(pop.PopupDialogText,"不可修改")> 0然后
             '表不可修改
             调用SetScriptStatus(pop.PopupDialogText)
             session.FindById(" wnd [1]/tbar [0]/btn [0]")。按
             session.FindById(" wnd [0]/tbar [0]/btn [15]")。press
             session.FindById(" wnd [0]/tbar [0]/btn [15]")。press
             结束
         其他:
             '其他条件
         万一
     万一
 

祝你好运! :)

Alawn_Xu
2楼-- · 2020-08-30 00:53

那只是一个示例。 调用SetScriptStatus()是执行用户反馈位的子例程。

原始版本是这样的:

公共子SetScriptStatus(状态为字符串)
 将状态设置到名为" ControlHeader"的Excel表中
     变暗的ControlHeader作为变体
    
     设置ControlHeader = Worksheets(" SAP GUI脚本").ListObjects(" ControlHeader")
        
     ControlHeader.DataBodyRange(1,4)=状态

 结束子
 

您可以在示例中删除该行。

樱桃小丸子0093
3楼-- · 2020-08-30 00:52

经过大量的挖掘-我发现没有确切的错误消息。

SAP是"唯一的"在状态栏中提供信息。

我检查了-当事情变成问题并在状态栏中检测到String时,我便触发了另一个"点击"并解决了问题:)

Daniel McCollum -非常感谢您的支持!

如果session.FindById(" wnd [0]/sbar")。Text ="选择有效的函数",则
 '做一些其他步骤
 万一
 
木偶小白
4楼-- · 2020-08-30 00:50

此外,您可以在状态栏属性上测试特定条件

修剪(session.FindById(" wnd [0]/sbar/")。MessageId)

 session.FindById(" wnd [0]/sbar/")。MessageNumber

 session.FindById(" wnd [0]/sbar/")。MessageType 

一些明显的例子。

如果要检查特定的ID,则比使用完整字符串检查要简单,尤其是对于包含变量的消息。

也欢迎您:)

一周热门 更多>