如何在VBScript中处理消息框

2020-09-16 19:56发布

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

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


大家好,

我在使用VBA/VBScript在SAP中自动执行流程时有一个疑问。

因此提供概述:

我正在对t代码VA42中的合同执行几个标准化更改。 有时会出现一个消息框,该脚本停止我的脚本:

在这些情况下,我只希望脚本单击"保存"并继续进行常规工作。

您能帮我吗?

我已经尝试使用Application.DisplayAllerts = False,但是它不起作用。 我考虑过错误处理程序,但这基本上不是错误。 您能建议一种管理方法吗?

我想可以用IF语句来完成,但是我不知道如何格式化我的代码。

提前谢谢!

代码:

子更改()


 今天=格式(日期," dd.mm.yyyy")
 Application.DisplayAlerts = False


 '我们在Excel中声明了while函数的变量
 Dim cont as String
 昏暗的行作为整数
 Dim rep As String


 Dim j作为整数
 j = 2


 '这些是我们使SAP可用于VBA代码的命令
 设置SapGuiAuto = GetObject(" SAPGUI")
   设置SAPApp = SapGuiAuto.GetScriptingEngine
   设置SAPCon = SAPApp.Children(0)
   设置会话= SAPCon.Children(0)


   如果IsObject(WScript)然后
    WScript.ConnectObject会话,"打开"
    WScript.ConnectObject应用程序,"打开"
  万一
 
 Session.findById(" wnd [0]")。maximize
 'Session.findById(" wnd [0]/tbar [0]/btn [3]")。press
 'Session.findById(" wnd [0]/tbar [0]/btn [3]")。press
 Session.findById(" wnd [0]/tbar [0]/okcd")。Text =" va42"
 Session.findById(" wnd [0]")。sendVKey 0




 '我们开始在宏书内循环,并为变量赋值
 使用本工作簿
 而单元格(j,1)<>""
 续=单元格(j,1)。值
 行=单元格(j,3)。值
 rep =单元格(j,4)。值


 '输入VBS代码
 '在这一部分中,我们将仪器更改为REMV
 Session.findById(" wnd [0]")。maximize
 Session.findById(" wnd [0]/usr/ctxtVBAK-VBELN")。Text =续
 Session.findById(" wnd [0]/usr/ctxtVBAK-VBELN")。caretPosition = 8
 Session.findById(" wnd [0]")。sendVKey 0
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT \ 01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT")。verticalrowbar.Position =
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT \ 01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAPFOO" [Set.5]。
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT \ 01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAP-KDMAT [5]。)。
 Session.findById(" wnd [0]")。sendVKey 2


 '改变日期
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT \ 03")。选择
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT")。文本=今天
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT")。SetFocus
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT")。caretPosition = 10


 '将INST更改为REMV
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 10")。选择
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT \ 10/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT")。Text = rep


 '删除技术对象中的第一行并保存更改
 Session.findById(" wnd [0]/mbar/menu [3]/menu [9]")。选择
 Session.findById(" wnd [0]/usr/tblSAPLIWOLOBJK_220")。getAbsoluteRow(0).Selected = True
 Session.findById(" wnd [0]/tbar [1]/btn [19]")。press
 Session.findById(" wnd [1]/usr/btnSPOP-OPTION1")。press
 Session.findById(" wnd [0]/tbar [0]/btn [3]")。press
 Session.findById(" wnd [0]/tbar [0]/btn [11]")。press


 '我们确保循环遍历每一行,然后结束
 j = j + 1
 温德


 结束于
 结束子


 

(61.7 kB)

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

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


大家好,

我在使用VBA/VBScript在SAP中自动执行流程时有一个疑问。

因此提供概述:

我正在对t代码VA42中的合同执行几个标准化更改。 有时会出现一个消息框,该脚本停止我的脚本:

在这些情况下,我只希望脚本单击"保存"并继续进行常规工作。

您能帮我吗?

我已经尝试使用Application.DisplayAllerts = False,但是它不起作用。 我考虑过错误处理程序,但这基本上不是错误。 您能建议一种管理方法吗?

我想可以用IF语句来完成,但是我不知道如何格式化我的代码。

提前谢谢!

代码:

子更改()


 今天=格式(日期," dd.mm.yyyy")
 Application.DisplayAlerts = False


 '我们在Excel中声明了while函数的变量
 Dim cont as String
 昏暗的行作为整数
 Dim rep As String


 Dim j作为整数
 j = 2


 '这些是我们使SAP可用于VBA代码的命令
 设置SapGuiAuto = GetObject(" SAPGUI")
   设置SAPApp = SapGuiAuto.GetScriptingEngine
   设置SAPCon = SAPApp.Children(0)
   设置会话= SAPCon.Children(0)


   如果IsObject(WScript)然后
    WScript.ConnectObject会话,"打开"
    WScript.ConnectObject应用程序,"打开"
  万一
 
 Session.findById(" wnd [0]")。maximize
 'Session.findById(" wnd [0]/tbar [0]/btn [3]")。press
 'Session.findById(" wnd [0]/tbar [0]/btn [3]")。press
 Session.findById(" wnd [0]/tbar [0]/okcd")。Text =" va42"
 Session.findById(" wnd [0]")。sendVKey 0




 '我们开始在宏书内循环,并为变量赋值
 使用本工作簿
 而单元格(j,1)<>""
 续=单元格(j,1)。值
 行=单元格(j,3)。值
 rep =单元格(j,4)。值


 '输入VBS代码
 '在这一部分中,我们将仪器更改为REMV
 Session.findById(" wnd [0]")。maximize
 Session.findById(" wnd [0]/usr/ctxtVBAK-VBELN")。Text =续
 Session.findById(" wnd [0]/usr/ctxtVBAK-VBELN")。caretPosition = 8
 Session.findById(" wnd [0]")。sendVKey 0
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT \ 01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT")。verticalrowbar.Position =
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT \ 01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAPFOO" [Set.5]。
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT \ 01/ssubSUBSCREEN_BODY:SAPMV45A:4426/subSUBSCREEN_TC:SAPMV45A:4908/tblSAPMV45ATCTRL_U_ERF_KONTRAKT/ctxtVBAP-KDMAT [5]。)。
 Session.findById(" wnd [0]")。sendVKey 2


 '改变日期
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT \ 03")。选择
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT")。文本=今天
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT")。SetFocus
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 03/ssubSUBSCREEN_BODY:SAPLV45W:4201/ctxtVEDA-VDEMDAT")。caretPosition = 10


 '将INST更改为REMV
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP/tabpT \ 10")。选择
 Session.findById(" wnd [0]/usr/tabsTAXI_TABSTRIP_ITEM/tabpT \ 10/ssubSUBSCREEN_BODY:SAPMV45A:4454/ctxtVBAP-KDMAT")。Text = rep


 '删除技术对象中的第一行并保存更改
 Session.findById(" wnd [0]/mbar/menu [3]/menu [9]")。选择
 Session.findById(" wnd [0]/usr/tblSAPLIWOLOBJK_220")。getAbsoluteRow(0).Selected = True
 Session.findById(" wnd [0]/tbar [1]/btn [19]")。press
 Session.findById(" wnd [1]/usr/btnSPOP-OPTION1")。press
 Session.findById(" wnd [0]/tbar [0]/btn [3]")。press
 Session.findById(" wnd [0]/tbar [0]/btn [11]")。press


 '我们确保循环遍历每一行,然后结束
 j = j + 1
 温德


 结束于
 结束子


 

(61.7 kB)
付费偷看设置
发送
1条回答
hongfeng1314
1楼 · 2020-09-16 20:28.采纳回答

你好Mihail,

请首先在SAP登录选项中禁用本机Windows对话框的使用,如下图所示。

如果已执行此操作,并且对话框进一步出现,而不是SAP对话框,则可以使用AutoItX轻松处理对话框。 如果您无法使用AutoItX,则可以使用VBScript命令AppActivate和SendKeys,但这有点棘手,您可以找到示例此处

让我们知道您的结果。

干杯
Stefan

一周热门 更多>