A String
можно безопасно сравнить с любым другим типом данных в VBA ... , за исключением Error
.
Сравнение Variant/Error
с чем-либо выдаст несоответствие типов ошибка.
Этот код неявно обращается к тому, что ActiveSheet
есть:
chk.Caption = Cells(idx + 1, superColm) & " " & idx
Cells
должен быть квалифицирован с конкретным объектом Worksheet
, который вы имеете в видуработать с.Если активный лист содержит значение, которое не может быть приведено к String
(например, #VALUE!
или #REF!
), это приведет к ошибке несоответствия типов .
Worksheets(Sheet2).Cells(1, i).Value = ...
Здесь Sheet2
- это идентификатор .Индексатору Worksheets
требуется либо целочисленное значение, либо строка.Если Sheet2
является кодовым именем рабочего листа в ThisWorkbook
, вам не нужно извлекать его из Worksheets
- просто используйте его:
Sheet2.Cells(1, i).Value = ...
Класс Worksheet
не делаетимеет свойство по умолчанию , поэтому Debug.Print Worksheets(Sheet2)
выдает ошибку 438 объект не поддерживает это свойство или метод - и последующий вызов члена, такой как .Cells(1, i)
, также выдает несоответствие типов ошибка.Если у вас нет строковой переменной Sheet2
, содержащей имя листа, я подозреваю, что это ошибка, с которой вы столкнулись прямо сейчас ... что означает, что все вышеперечисленное - это то, что вас ждет:)
Если Sheet2
является строковой переменной, которая содержит действительное имя листа, вы можете использовать функцию IsError
, чтобы проверить, является ли Variant
Variant/Error
:
If Not IsError(Sheet2.Cells(1, i).Value) Then
' value is safe to compare against a string
Else
' comparing the cell value to anything will throw error 13
End If
Наконец, я бы посоветовал не использовать Rows
в качестве глобальной переменной, поскольку это уже идентификатор глобальной области ([_Global].Rows
, косвенно ссылающийся на ActiveSheet
).Теперь переименовать эту переменную с помощью Find / Replace будет довольно сложно, не нарушая ваш код: рефакторинг Rubberduck «переименование», вероятно, может помочь сделать это безопасно (отказ от ответственности: я управляю этим OSS VBIDEпроект надстройки).