2016-09-29 5 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 

Привет,Workbook не может быть назначен

У меня есть выше книги. Строка, где «Set wBk =» получает ошибку индексации вне диапазона.

Что находится внутри «wbList (intListCounter)» здесь правильно, поскольку он указывает на файл xlsm с расширением.

Тем не менее, я подозреваю, что «xlobj.Workbooks.Open» является виновником, но не смог указать ошибку, поскольку некоторые из вышеперечисленных документов написаны предыдущим консультантом.

Цените свою помощь!

ответ

1

Ваша проблема: вы создаете новый экземпляр класса Excel.Application, но затем пытаетесь открыть книгу из Active (то есть экземпляр, в котором эта процедура выполняется). Поскольку файл не открыт в экземпляре active/running, ожидается ошибка.

Вы могли бы решить путем:

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

Но это кажется довольно Hacky, и делает из кода, который будет трудно следовать.

Вы должны присвоить переменный объект Workbook во время открытия файла

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), True, True "Код" Будет "Правда, правда" в конце предыдущей строки указывает? – Dingo

+1

Это указывает параметр 'True' для' UpdateLinks' и 'ReadOnly'. –

+0

Вы можете найти почти все, что угодно из [Справочник по объектной модели Excel] (https://msdn.microsoft.com/en-us/library/office/ff194068 (v = office.14) .aspx), просто перейдите к соответствующий объект/метод/и т. д. –

Смежные вопросы