Ошибка выполнения 13 в цикле For
По какой-то причине я получаю ошибку "Runtime 13" при выполнении следующего кода.
Dim N_1 As Variant
Worksheets("Trucks").Activate
Range("G9").Activate
Do Until ActiveCell.Value = ""
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then Exit Do
Loop
ActiveCell.Offset(-1, 0).Select
N_1 = Range(ActiveCell, "G9")
With CreateObject("scripting.dictionary")
.comparemode = vbTextCompare
For Each v1 In N_1
If Not IsEmpty(v1) Then
If Not .exists(v1) Then .Add v1, Nothing
End If
Next
z1 = .keys
End With
1 ответ
Range(...)
возвращает тип объекта так Set
должен быть использован:
Set N_1 = Range(ActiveCell, "G9")
В то время как Range(...)
возвращает тип объекта, присваивая его Variant
без использования Set
создает двумерный вариант массива значений ячеек в диапазоне. Это работает нормально с For Each v1 in N_1
часть и с IsEmpty(v1)
часть.
Поэтому я не уверен на 100%, почему вы получили ошибку 13 в первую очередь (при условии, что v1
а также z1
также объявлены как Variant
). Действительно, если вы используете Set
вам также придется изменить ваш цикл, который заполняет словарь для использования v1.Value
вместо просто v1
Если вы впоследствии используете N_1
и ожидая, что это будет Range
объект, то это будет объяснять вещи, но код, представленный выше, работает нормально для меня, если все объявлено как Variant
: