Excel VBA: как получить логическое значение из ячейки?

#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