2015-04-06 1 views
1

Назначение диапазона массиву довольно просто. Тем не менее, я нашел случай, когда VBA вел себя неожиданно. Я не мог найти ответ, почему это так, и поэтому я надеюсь, что кто-то может объяснить мне, почему он не работает.Назначение диапазона для массива с использованием «With .. End With»

Задача: Назначьте диапазон (от открытой Workbook) в массив

Рабочий код

Dim vrtTabOEen() as Variant 
Dim rngTabOEen as Range 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    Set rngTabOEen = .Range(Name_Tab_Def_OEen) 
    vrtTabOEen = rngTabOEen 
End With 

Номера Рабочий код

Dim vrtTabOEen() as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen) 
End With 

С помощью нерабочий код, я получу ошибку 13: Тип несоответствия.

Вопрос Почему я должен назначить целевой диапазон переменной типа «диапазон» до создания массива из него?

ответ

3

У вас слишком много уровней косвенности для неявного принуждения из массива Variant to Variant для работы из-за того, что Worksheets возвращает общий объект, и вы не указали свойство value, которое должно быть всегда do , Либо:

Dim vrtTabOEen() as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen).Value 
End With 

или:

Dim vrtTabOEen as Variant 

With ThisWorkbook.Worksheets(Name_AB_Tab_Def_OEen) 
    vrtTabOEen = .Range(Name_Tab_Def_OEen) 
End With 

должен работать.

+0

Спасибо, Рори, это сработало. Хотя я не понял начало вашего первого предложения. «Уровни косвенности», а также «неявное принуждение» мне не известны. Посмотрите на них – AndyP

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