Объявите leRange As String
, и вы получите String
пусто.Ваш код не имеет отношения к типу возврата Range.Value
, это должен решить Excel.
Проблема в том, что leRange
здесь не просто любой другой Variant/Empty
: диапазон не охватываетодна ячейка, так что то, что содержит вариант, на самом деле представляет собой двумерный массив вариантов, и вот как все работает.Вы не можете изменить подтип варианта отдельных элементов массива, которые вы получаете из объектной модели приложения хоста.
Variant/Empty
не эквивалентен пустой строке: если ячейка фактически пуста, то IsEmpty
возвращает истину.Если ячейка содержит / оценивает пустую строку, то IsEmpty
возвращает false.
Обратите внимание, что только Variant
может содержать значение Error
.Если ячейка оценивается, например, как #REF!
, подтип варианта будет Variant/Error
, и IsError
вернет для него значение true - попытка присвоить такое значение String
приведет к несоответствию типов ошибка.
Excel предоставляет вариантный массив: ваш код должен иметь дело с вариантным массивом.Empty
легко сравнивается с ""
или vbNullString
(сравнение оценивается как True) - проблема не решается, ваше беспокойство по поводу подтипа варианта неуместно, не о чем беспокоиться.
Edit: функция, которая принимает эти данные в качестве аргумента, нуждается в варианте строк, и я не могу изменить его, поэтому мне нужно сделать замену.
Я не уверен, что это значит, но если это означает, что вы передаете весь массив 2D Variant
в функцию, которая принимает массив String()
, тогда да, вам нужно объявить новый массив и скопировать ваши вариантыв строки, в противном случае вы можете ожидать несоответствия типов - это неэффективно, так как вы ожидаете, что ему дадут несколько сотен / тысяч ячеек, но если речь идет о горстке ячеек, вовлеченных в OP, это не должно бытьочень плохо.