【问题标题】:Subscript out of range when trying to active already opened workbook尝试激活已打开的工作簿时下标超出范围
【发布时间】: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")

标签: excel vba


【解决方案1】:

试试这个:如果 VB 在当前工作簿中编码


Dim wbMRO As Excel.Workbook
Set wbMRO = ThisWorkbook
wbMRO.Activate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2017-01-16
    • 2020-02-27
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多