无法分配工作簿

时间:2016-09-29 18:54:26

标签: excel vba

    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”是罪魁祸首,但无法确定错误,因为上述部分内容是由之前的顾问撰写的。

感谢您的帮助!

1 个答案:

答案 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