从SAP GUI导出表格:VBA错误9下标越界及禁止自动打开问题
SAP GUI VBA导出:解决自动打开文件及Workbooks关闭下标越界问题
1. 实现仅保存文件不自动打开
SAP的XXL导出对话框里有个“保存后不打开文件”的选项,你需要在代码中添加对该控件的设置。通常这个控件的ID是wnd[1]/usr/chk[1](不同SAP版本可能略有差异,若无效可重新录制导出操作:手动勾选“不打开文件”后,录制的代码会包含该控件的设置语句,直接照搬即可),将其Selected属性设为True就能实现仅保存不打开。
修改后的导出相关代码片段:
session.findById("wnd[0]/usr/cntlCONTAINER_1/shellcont/shell").pressToolbarContextButton "&MB_EXPORT" session.findById("wnd[0]/usr/cntlCONTAINER_1/shellcont/shell").selectContextMenuItem "&XXL" ' 新增:设置保存后不打开文件 session.findById("wnd[1]/usr/chk[1]").Selected = True session.findById("wnd[1]/usr/cmb").SetFocus session.findById("wnd[1]/tbar[0]/btn[0]").press session.findById("wnd[1]/usr/ctxt[0]").Text = "T:\DEPT-TSCW\WL\Inwentaryzacja\TEMP\" session.findById("wnd[1]/usr/ctxt[1]").Text = "EXPORT.XLSX" session.findById("wnd[1]/usr/ctxt[1]").caretPosition = 11 session.findById("wnd[1]").sendVKey 0
2. 解决Workbooks关闭时的下标越界错误
Workbooks集合仅支持纯文件名(不含路径)或工作簿索引序号作为引用条件,不能使用完整文件路径,这就是你触发“下标越界”错误的原因。
三种可行解决方法:
- 方法一:直接用纯文件名引用
' 只用文件名,不带路径 Workbooks("EXPORT.XLSX").Close SaveChanges:=False
- 方法二:遍历Workbooks集合查找目标文件(更稳定,避免同名文件冲突)
Dim wb As Workbook For Each wb In Workbooks ' 用FullName匹配完整路径和文件名 If wb.FullName = "T:\DEPT-TSCW\WL\Inwentaryzacja\TEMP\EXPORT.XLSX" Then wb.Close SaveChanges:=False Exit For ' 找到后立即退出循环 End If Next wb
- 方法三:用
GetObject直接获取目标工作簿对象
Dim wb As Workbook Set wb = GetObject("T:\DEPT-TSCW\WL\Inwentaryzacja\TEMP\EXPORT.XLSX") wb.Close SaveChanges:=False Set wb = Nothing ' 释放对象资源
额外提醒:
如果已经实现“仅保存不打开”,文件不会在Excel中打开,此时原代码中的Application.Wait和ActiveWorkbook.Close语句可以直接删除,无需执行。
内容的提问来源于stack exchange,提问作者Tom Stoff
相关产品推荐
相关产品推荐

