2013-05-30 3 views
0

Это работает с MsgBox, но не тогда, когда я раскомментирую инструкцию присваивания, я получаю ошибку несоответствия типа. У меня есть неизвестная длина строк, начиная с D1, которую я хочу сохранить в массиве MyArr.Тип несоответствия хранения значения ячейки в массиве VBA

Dim MyArr As Variant 
Range("D1").Select 
I = 1 

While ActiveCell <> Empty 
    MsgBox ("this is in the active cell:" & ActiveCell.Value) 
' MyArr(I) = ActiveCell.Value 
    I = I + 1 
    ActiveCell.Offset(1, 0).Select 
Wend 
+2

MyArr (I) потерпит неудачу, поскольку MyArr не был определен как массив. Если вы знаете конечное условие для своего набора строк, тогда может быть построен диапазон, который может быть назначен массиву – SeanC

ответ

1

MyArr(I) потерпит неудачу, поскольку MyArr не был определен как массив. Глядя на ваш код, кажется, что вы хотели бы MyArr содержать все строки, найденные от D1 до первой пустой ячейки

Dim MyArr 
MyArr=Range("D1", Range("D1").End(xlDown)) 
If VarType(MyArr)>vbArray then 'more than 1 cell returned 
    'D1 is in MyArr(1,1) 
    'D2 is in MyArr(2,1) 
    '... 
    'Lastcell is in MyArr(Ubound(MyArr),1) 
Else 'Only one cell found with text 
    'D1 is in MyArr 
    'note no() -> one cell = no array 
End If 
+0

Спасибо, Шон! Работать, но блокировать, когда я пытаюсь получить доступ к MyArr, когда он находится в состоянии ELSE. попробовал MyArr, MyArr (1) и MyArr (1,1), но продолжал блокироваться. –

+0

@MichaelDehnel: Что вы подразумеваете под блокировкой? – shahkalpesh

+0

, если вы переходите к инструкции else, тогда 'MyArr' - это переменная, а не' MyArr (... '. Я бы проверил значение, которое вы получаете из' VarType (MyArr) ', чтобы увидеть, что он возвращает тип переменной, которую вы ожидаете. [Эта страница] (https://office.microsoft.com/en-us/access-help/vartype-function-HA001228932.aspx) расскажет вам, какие значения возвращаются ** VarType ** – SeanC