#excel #vba
#excel #vba
Вопрос:
У меня есть ячейка со boolean
значением (в формате General
). Приведенный ниже код выдает Run-time error '13': Type mismatch
Dim bVar As Boolean
bVar = Selection.Value
Что я делаю не так?
Debug.Print TypeName(Selection.Value)
ВОЗВРАТ "String"
Спасибо за предложения.
Комментарии:
1. Попробуйте, пожалуйста:
bVar = CBool(Selection.Value)
. Вы можете проверить это следующим образом:Debug.Print TypeName(CBool(Selection.Value))
.2. Не могли бы вы поделиться всем кодом, чтобы мы могли видеть, в каком контексте это происходит, потому что я не могу его воспроизвести. Независимо от того, находятся ли
TRUE
(когдаTypeName(Selection.Value)
возвращаетBoolean
) или="True"
(когдаTypeName(Selection.Value)
возвращаетString
) в ячейке, ошибки нет. Не должно быть необходимости вCBool
.3.Это было в контексте
ListObject Table
такого цикла, как:For i = 1 to Table.ListRows("A").Rows
bVar = Table.ListColumns("A").Range.Rows(i).Value
4. @VBasic2008: Вы правы. Я попытался ответить только для преобразования строки в логическое значение… Но, если
bVar
было объявлено какBoolean
, преобразование выполняется автоматически. Конечно, если выделение относится к отдельной ячейке, содержащей строки типа «True», «False» или числа (для 0 возвращаетсяFalse
иTrue
для всего, что больше 0). Вышеуказанная ошибка может возникнуть, только если в значении выбора не содержится такой строки или выделение содержит более одной ячейки… Но, если строка не является «True» или «False», даже если она эквивалентна на языке локализации, она может вернуть эту ошибку.5. Какие конкретные строки находятся в обрабатываемом диапазоне? Что-то еще, кроме «True», «False» или чисел? Если да, то это причина ошибки… «Dog» не может быть преобразован в
Boolean
…