2015-05-20 5 views
0

Так вот у меня есть VBA код, который является частью моей функции, но всякий раз, когда я бегу, я получаю следующее сообщение об ошибке:VBA Ошибка выполнения 9 листовым

Run-Time error '9': Subscript out of range 

Фактическая рабочая таблица существует. В редакторе vba на боковой панели он отображается как Sheet2 (Data_Sheet). В деталях в этой панели, она показывает (Name) как лист 11 и Имя как Data_Sheet. Кто-нибудь знает возможный источник этой ошибки? Мой код ниже:

With Sheets("Data_Sheet") 

     'this searches just row 1 
     Set header_cell_1 = .Rows(1).Find(What:="One", lookat:=xlWhole, MatchCase:=False, searchformat:=False) 
     Set header_cell_2 = .Rows(1).Find(What:="Two", lookat:=xlWhole, MatchCase:=False, searchformat:=False) 
     Set header_cell_3 = .Rows(1).Find(What:="Three", lookat:=xlWhole, MatchCase:=False, searchformat:=False) 
     Set header_cell_4 = .Rows(1).Find(What:="Four", lookat:=xlWhole, MatchCase:=False, searchformat:=False) 
     Set header_cell_5 = .Rows(1).Find(What:="Five", lookat:=xlWhole, MatchCase:=False, searchformat:=False) 
     Set header_cell_6 = .Rows(1).Find(What:="Six", lookat:=xlWhole, MatchCase:=False, searchformat:=False) 
     Set header_cell_7 = .Rows(1).Find(What:="Seven", lookat:=xlWhole, MatchCase:=False, searchformat:=False) 

     col_1 = header_cell_1.Column 
     col_2 = header_cell_2.Column 
     col_3 = header_cell_3.Column 
     col_4 = header_cell_4.Column 
     col_5 = header_cell_5.Column 
     col_6 = header_cell_6.Column 
     col_7 = header_cell_7.Column 

    End With 
+1

У вас открыто несколько книг, когда вы запускаете этот код? –

+0

Только рабочая тетрадь и скрытая книга, в которой макросы автоматически сохраняются. – Paradox

+1

Можете ли вы поместить 'MsgBox ThisWorkbook.Path & vbNewLine & ThisWorkbook.Name' чуть выше' With Sheets («Data_Sheet») 'и проверить, работает ли макрос из правильной книги? –

ответ

4

Как от комментариев, макрос работает с PERSONAL.XSLB книги так, что он пытается найти Sheets("Data_sheet") в нем, и явно не найти, потому что это в другой книге ->Subscript out of range.

Чтобы исправить, всегда использовать полные ссылки о Object вы работаете с:

With Workbooks("myWorkbook.xlsm").Sheets("Data_sheet") '<-- explicitly saying in which workbook it must look for the sheet 

End With 

В качестве альтернативы, помните, что:

  • ThisWorkbook ссылается на рабочей книги код работает с. В вашем случае это будет ссылка на PERSONAL.XLSB;
  • ActiveWorkbook ссылки на действующую книгу. Очень рискованно использовать (обычно, вы должны знать, какую книгу вы хотите настроить). Но могут быть некоторые случаи, когда вы хотите, чтобы код был намеренно запущен в активной книге (см. Пример надстройки: код запускается из надстройки, но вы хотите, чтобы надстройка запускалась в рабочей книге из которого используется).

ВНИМАНИЕ:

Распространенной ошибкой является не использовать любую ссылку, как в вашем случае:

With Sheets("Data_Sheet") '<-- of which workbook? 

В этом случае VBA отвечает сам вопрос с ActiveWorkbook, который является объектом по умолчанию. Только если вы явно хотите бежать от ActiveWorkbook, вам следует оставить его таким; в противном случае всегда ссылается на объект, чтобы избежать ошибок, связанных с этим.

+0

Обе книги выглядят как ThisWorkbook. Где я могу найти их точное имя или переименовать их? Файл не находится в PERSONAL.XLSB – Paradox

+0

@Paradox у вашей книги есть имя (я имею в виду, вы «сохранили его как» ... что-то)? Или недавно созданный? –

+0

Ahh Я нашел его. Спасибо!!! – Paradox

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