SAP Vba“Application.DisplayAlters = False”

问题描述 投票:0回答:1

我是闷棍训练的新手。但我喜欢这样的想法:我可以使用 vba 在 sap 中自动执行任务。

不幸的是,我现在遇到了一个我无法解决的问题。我想在 Excel 中保存 cm02 查询的列表。

一切工作正常,直到我想要保存 Excel 文件。 excel 文件已经存在,我必须确认我想要覆盖现有文件。 通常我会通过在 vba 代码开头设置 application.displayAlerts = false 来抑制此消息。不幸的是,application已经被定义为一个对象,否则我无法调用sap gui。如果我设置代码 application.displayalters = false,我会收到错误消息“运行时错误 424”-需要对象。

下面你可以看到我的代码。还有其他选项可以抑制覆盖 Excel 文件的问题吗?

不幸的是我不知道如何解决这个问题。我将感谢您的帮助和建议。

提前非常感谢。

Sub CM02()

Application.DisplayAlerts = False


Dim Application, SapGuiAuto As Object

If Not IsObject(Application) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set Application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = Application.Children(0)
End If
If Not IsObject(session) Then
   Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session, "on"
   WScript.ConnectObject Application, "on"
End If


session.findById("wnd[0]").resizeWorkingPane 126, 39, False
session.findById("wnd[0]/tbar[0]/okcd").Text = "/ncm02"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/mbar/menu[0]/menu[4]/menu[0]").Select
session.findById("wnd[1]/usr/ctxtRC65A-PROFIL_ID").Text = "Z13_B-730T"
session.findById("wnd[1]/usr/ctxtRC65A-PROFIL_ID").caretPosition = 10
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]/mbar/menu[0]/menu[4]/menu[3]").Select
session.findById("wnd[1]/usr/ctxtRC65A-LISPROF_ID").Text = "ZPP_TEST"
session.findById("wnd[1]/usr/ctxtRC65A-LISPROF_ID").caretPosition = 8
session.findById("wnd[1]").sendVKey 0
session.findById("wnd[0]/usr/txt[35,3]").Text = "*"
session.findById("wnd[0]/usr/txt[35,7]").Text = "1300"
session.findById("wnd[0]/usr/txt[35,7]").SetFocus
session.findById("wnd[0]/usr/txt[35,7]").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[6]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press


session.findById("wnd[0]").resizeWorkingPane 128, 39, False
session.findById("wnd[0]/mbar/menu[4]/menu[11]/menu[1]/menu[1]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").Select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[0,0]").SetFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/tbar[0]/btn[0]").press


  
  Windows("Tabelle von Basis (1)").Activate
    ActiveWorkbook.SaveAs Filename:="C:\Users\Cxxxx\Desktop\test.xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    Windows("Tabelle von Basis (1)").Close



End Sub

解决我的问题

excel vba sap-gui
1个回答
0
投票

您是否尝试过将 Dim Application 重命名为其他名称?因为应用程序是 VBA 的本机命令。

试试这个:

Sub CM02()

Application.DisplayAlerts = False


Dim ApplicationSAP, SapGuiAuto As Object

If Not IsObject(ApplicationSAP) Then
   Set SapGuiAuto = GetObject("SAPGUI")
   Set ApplicationSAP = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
   Set Connection = Application.Children(0)
End If
If Not IsObject(session) Then
   Set session = Connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session, "on"
   WScript.ConnectObject Application, "on"
End If

只需将与 SAP 相关的所有内容更改为 ApplicationSAP。

© www.soinside.com 2019 - 2024. All rights reserved.