Set xlobj = CreateObject("Excel.Application")
xlobj.DisplayAlerts = 0
xlobj.Workbooks.Open wbPathName & "\" & wbList(intListCounter), True, True
DoEvents
Dim wBk As Workbook
Set wBk = Workbooks(wbList(intListCounter))
MsgBox wBk
您好,
我有上面的工作簿。 “设置wBk =”的行使下标超出范围错误。
“wbList(intListCounter)”里面的内容是正确的,因为它指向带扩展名的xlsm文件。
然而,我怀疑“xlobj.Workbooks.Open”是罪魁祸首,但无法确定错误,因为上述部分内容是由之前的顾问撰写的。
感谢您的帮助!
答案 0 :(得分:1)
这是您的问题,您正在创建Excel.Application类的新实例,但之后您尝试从Active(即运行此过程的实例)打开工作簿。由于文件在活动/正在运行的实例中不打开,因此会出现错误。
您可以通过以下方式解决:
Set wBk = xlobj.Workbooks(wbList(intListCounter))
但这似乎相当hacky,并且很难从代码中获得。
您应该在打开文件时分配到工作簿对象变量
Dim wBk As Workbook
Dim xlObj as Excel.Application
Set xlobj = CreateObject("Excel.Application")
xlobj.DisplayAlerts = 0
Set wBk = xlobj.Workbooks.Open(wbPathName & "\" & wbList(intListCounter), True, True)
此外,您可能不需要创建新的Excel实例(有时需要这样做,但我认为大部分时间都没有必要),在这种情况下您可以简单地执行:
Dim wbK as Workbook
Set wBk = Workbooks.Open(wbPathName & "\" & wbList(intListCounter), True, True)
另请注意,此行会引发438错误:
MsgBox wBk
如果需要,请执行此操作:
MsgBox wBk.Name