2016-09-29 95 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)中找到幾乎任何東西,只需向下鑽取即可適當的對象/方法等。 –