【发布时间】:2018-11-23 06:12:48
【问题描述】:
我有下面的代码,它是从 SAP 获取电子表格,然后在上面做一些事情。问题是当我从 SAP 下载 excel 文件时,它将自动打开,当我将工作簿设置为活动工作簿以完成我的工作时,它显示错误:“下标超出范围”。我 100% 确定路径是正确的,因为如果我使用 Workbook.Open 它就可以工作。非常感谢您的帮助。
Sub GetMRO()
Today_Date = GetTodayDate()
Start_Date = StartDate()
WeekNum = WeekDate()
'Startup SAP
If Not IsObject(sApplication) Then
Set SapGuiAuto = GetObject("SAPGUI")
Set sApplication = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
Set Connection = sApplication.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 sApplication, "on"
End If
'Access to FBL3N to get data
session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").text = "FBL3N"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/tbar[1]/btn[17]").press
session.findById("wnd[1]/usr/txtV-LOW").text = "MRO"
session.findById("wnd[1]/usr/txtENAME-LOW").text = ""
session.findById("wnd[1]/usr/txtV-LOW").caretPosition = 3
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]/usr/ctxtSO_BUDAT-LOW").text = Start_Date
session.findById("wnd[0]/usr/ctxtSO_BUDAT-HIGH").text = Today_Date
session.findById("wnd[0]/usr/ctxtSO_BUDAT-HIGH").setFocus
session.findById("wnd[0]/usr/ctxtSO_BUDAT-HIGH").caretPosition = 10
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/lbl[27,12]").setFocus
session.findById("wnd[0]/usr/lbl[27,12]").caretPosition = 0
session.findById("wnd[0]").sendVKey 16
session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\Users\Tung Hoang\Documents\Tung\Equipment\Planning\" & "Week " & WeekNum
session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "MRO week " & WeekNum & ".XLSX"
session.findById("wnd[1]/usr/ctxtDY_FILENAME").caretPosition = 10
session.findById("wnd[1]/tbar[0]/btn[0]").press
Dim wbMRO As Workbook
Set wbMRO = Workbooks("C:\Users\Tung Hoang\Documents\Tung\Equipment\Planning\" & "Week " & WeekNum & "\" & "MRO week " & WeekNum & ".XLSX")
wbMRO.Activate
End Sub
【问题讨论】:
-
您是否尝试过在不使用文件路径的情况下设置
wbMRO?也许看看仅使用工作簿的名称是否可以解决您的问题 -
我试过了,但仍然显示错误“下标超出范围”
-
当工作簿已经打开时,Workbooks() 只取工作簿的名称,而不是完整路径。应该是 Set wbMRO = Workbooks(""MRO week " & WeekNum & ".XLSX")