Ошибка выполнения 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:

Скриншот Excel, показывающий код вопроса, работающего без ошибок

Другие вопросы по тегам