2016-09-29 109 views
1
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 

嗨,工作簿无法分配

我有上述工作簿。 “Set wBk =”的行会使下标超出范围错误。

这里的“wbList(intListCounter)”里面的内容是正确的,因为它指向一个扩展名为xlsm的文件。

但是,我怀疑“xlobj.Workbooks.Open”是罪魁祸首,但无法指出错误,因为上述部分内容是由以前的顾问撰写的。

感谢您的帮助!

回答

1

这是您的问题,您正在创建一个新的Excel.Application类实例,但您试图从Active(即运行此过程的实例)中打开工作簿。由于在活动/运行实例中打开的文件是而不是,因此预计会发生此错误。

您可以通过以下方法解决:

Set wBk = xlobj.Workbooks(wbList(intListCounter)) 

但是,这似乎相当哈克,并从代码,这将是难以遵循,使。

你应该分配给工作簿对象变量打开文件

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 
+0

非常感谢。像魅力一样工作! 快速侧的问题: “代码” xlobj.Workbooks.Open wbPathName& “\” &wbList(intListCounter),真,真 “的代码”“ 请告诉我 ”真,真“ 在高于线的端部表示? – Dingo

+1

这为'UpdateLinks'和'ReadOnly'指定了'True'参数。 –

+0

您可以从[Excel对象模型参考](https://msdn.microsoft.com/zh-cn/library/office/ff194068(v = office.14).aspx)中找到几乎任何东西,只需向下钻取即可适当的对象/方法等。 –