我有一个混合了SAPScript和VBA的VBA代码。 基本上,我使用SAP事务并将其导出为Excel工作表,然后单击“导出”按钮,询问要保存的位置。
我已经使用SAP录制了脚本并将其插入VBA
步骤是:
(显然没有涉及“另存为...”窗口的代码,用户必须进行交互)
单击按钮可返回主页(SAP)
为“打开的工作簿”设置一个名称,以便我可以使用它
问题是,如果我运行代码,它将无法正常工作。就像代码不会等到打开工作簿才能继续一样。
我尝试过:
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select '(Step 1)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)
Set Book = ActiveWorkbook '(Step 3)
Set Sheet = ZMMBBook.Worksheets("Sheet1") '(Step 3)
应该设置了工作簿,但是代码会在打开之前运行。即使试图在它们之间添加时间也行不通,这就像它仅在进度之后才打开,但是当进度进行时,工作簿没有打开,因此会导致“下标超出范围”错误。
如果我在“设置”行中插入一个断点,则会打开工作簿,并且如果我继续进行,代码将正常工作。
我想作为解决方案:
一种插入代码行的方法,该代码行使代码像在断点处一样“中断”(但很平稳,因此最终用户可以使用它)
SAPScript中与“保存窗口”交互的一种方式(因为我认为这是导致该错误的原因)
任何其他解决方案
谢谢大家!
答案 0 :(得分:0)
在继续使用VBA之前,请在按下最后一个SAP GUI按钮之后尝试测试文件是否成功下载。像这样...
session.findById("wnd[0]/mbar/menu[0]/menu[3]/menu[1]").Select '(Step 1)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)
session.findById("wnd[0]/tbar[0]/btn[3]").press '(Step 2)
' Check the file downloaded successfully
If session.findById("wnd[0]/sbar").Text <> "" Then
msgbox "There was an error downloading the file"
end if
Set Book = ActiveWorkbook '(Step 3)
Set Sheet = ZMMBBook.Worksheets("Sheet1") '(Step 3)
GUI脚本擅长等待自身完成处理后再继续下一条命令,但是在SAP GUI脚本和VBA之间来回移动时,我曾经遇到问题。
或者,您是否需要导出文件以获取数据?我的第一个偏好是直接从GUI,表格,网格或一系列单个字段中提取数据到一个数组中,然后将其粘贴到Excel Range中。这意味着需要更多的GUI脚本,但通常运行速度更快,并且使我们能够更好地控制我们获得的数据以及数据的去向(描述字段通常使用相同的标头导出,但可以在SAP GUI中轻松识别)。