2016-01-25 3 views
2

Так что я получаю странную ошибку при запуске этой части моего макроса vba. Предполагается, что макрос проходит через таблицу людей и их информацию, и где пользователь, указанный в графическом интерфейсе, их строка имеет значение «», после чего таблица сортируется. Введенные данные проверяются, поэтому пользователь не может введите значение, которое не существует.Странная ошибка времени выполнения «424» при запуске цикла for

Вот проблемный код:

Set destPpl = Worksheets("People").Range("A2") 

    Do While (destPpl.value <> I1.value And destPpl.value <> "") 
     Set destPpl = destPpl.Offset(1, 0) 
    Loop 

    For i = 1 To 5 
     destPpl.value = "" 'debug error occurs here 
     destPpl = destPpl.Offset(0, 1) 
    Next i 

Это удалит первое содержание столбца, а затем не перебирать остальные столбцы. Все ссылки на таблицы верны. Я понятия не имею, что не так.

Спасибо за любую помощь

ответ

6

Изменить это:

destPpl = destPpl.Offset(0, 1) 

к этому:

Set destPpl = destPpl.Offset(0, 1) 

Я думаю, что destPpl не должным образом объявлен как диапазон, или вы бы впервые получил ошибку на этой линии через цикл.

Что происходит в первый раз через цикл destPpl меняется с объекта Range на значение destPpl.Offset(0, 1). Таким образом, во втором цикле destPpl не имеет квалификатора .Value, поскольку он больше не является диапазоном.

Правильная декларация destPpl является:

Dim destPpl as Range 
+4

для дальнейшего этот ответ, обеспечивая, чтобы всегда использовать [Option Explicit] (https://msdn.microsoft.com/en-us/library/y9341s4f.aspx) поможет избежать подобных ошибок в будущем :) –