VBS将数据导出SAP事务代码FBL5N



我在事务代码FBL5N中录制了一个脚本,该脚本会弹出"另存为"对话框。

但是,我不能使用任何命令,例如sendkey

我需要一个代码来提供文件路径和文件名。

到目前为止,我有以下代码:(来自SAP脚本录制和回放)

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]").maximize
session.findById("wnd[0]/usr/lbl[30,2]").setFocus
session.findById("wnd[0]/usr/lbl[30,2]").caretPosition = 25
session.findById("wnd[0]").sendVKey 16

谢谢。

David

请参阅我的文章"从SAP保存PDF",我在其中发布了一个处理另存为窗口的解决方案。If也适用于SAP和其他窗口,因为它是基于WinAPI的。

基本上,你有4个步骤要遵循:

  1. 将vbs脚本转换为VBA(将在excel中运行)。不要包括触发另存为窗口的行。开始:

    子脚本()Dim SapAPP作为变体将i标注为整数设置SapGuiAuto=GetObject("SAPGUI")设置SapAPP=SapGuiAuto.GetScriptingEngine设置连接=SapAPP.Children(0)设置会话=连接.Children(0)

2.只使用触发"另存为"窗口的行创建一个新脚本。例如:

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]").sendVKey 16

3.要求VBA运行此VB脚本

Shell "wscript insert_path_here", vbNormalFocus

4.处理"另存为"窗口(如我的帖子中所述)。

这在不同的SAP菜单中对我有效,但FBL5n应该完全相同。

最佳,

我不确定tcode FBL5N是如何工作的,但我使用此代码导出某些基础事务的结果。它可能适用于您的情况,请尝试一下。

session.findById("wnd[0]/mbar/menu[0]/menu[1]/menu[2]").select
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:folder1folder2"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "filename.txt"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 13
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 2
session.findById("wnd[1]/tbar[0]/btn[11]").press
session.findById("wnd[0]/tbar[0]/btn[3]").press