Excel: type () и WorksheetFunction.IsText () не работают для длинных строк - PullRequest
0 голосов
/ 03 ноября 2018

Находят ли другие люди такое поведение? Я использую Excel 2007 под Windows 7.

В Excel VBA:

Public Function bTest_IsText(vArg As Variant) As Boolean
bTest_IsText = WorksheetFunction.IsText(vArg)
End Function

Public Function nTest_VarType(vArg As Variant) As Integer
nTest_VarType = VarType(vArg)
End Function

В листе Excel:

A1: =REPT("-", 255)
A2: =REPT("-", 256)
A3: =ISTEXT(A1)
B3: =bTest_IsText(A1)
C3: =TYPE(A1)
D3: =nTest_VarType(A1)
A4: =ISTEXT(A2)
B4: =bTest_IsText(A2)
C4: =TYPE(A2)
D4: =nTest_VarType(A2)

Ячейки A3: результат D4:

TRUE   TRUE     2   8
TRUE   FALSE   16   8

Возвращаемые значения 2 и 16 из type() имеют , означающее «Текст» и «Значение ошибки», соответственно. Возвращаемое значение 8 (= vbString) VarType() имеет , означающее"Строка".

Похоже, что type() в Excel и WorksheetFunction.IsText() в Excel VBA не работают, если переданный им аргумент содержит более 255 символов. IsText() в Excel не имеет этого ограничения. Обходной путь для сбоя WorksheetFunction.IsText() заключается в проверке на VarType(...) = vbString (что может быть лучше в любом случае).

Это законные ошибки или я что-то не так делаю?

Есть ли место, где компилируются проверенные ошибки, поэтому мне не нужно удивляться, что я схожу с ума, когда вижу что-то подобное?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Обходной путь !? (Неа!)

Public Function bTest_IsText(vArg As Variant) As Boolean
  Dim tArg As Variant
  tArg = vArg
  bTest_IsText = WorksheetFunction.IsText(tArg)
End Function

Придумал ответ после использования этого:

Public Function bTest_IsText(vArg As String) As Boolean
  bTest_IsText = WorksheetFunction.IsText(vArg)
End Function

, что всегда приводило к ИСТИНА, независимо от того, что вы положили в ячейку 'A2'.

Итак, я бы пришел к выводу, что ваша функция не выполняет то, что вы думали, что она сделает .

Случается со мной все время.

0 голосов
/ 03 ноября 2018

WorksheetFunction.IsText выглядит нормально, если вместо объекта Range используется vArg.Value. =CELL("type", A2) тоже работает.

Проблема с функцией TYPE выглядит как недокументированное ограничение. Похоже, что это связано с «Текстовые значения в формулах ограничены 255 символами.» ошибка, потому что документация Примечания упоминает:

Вы не можете использовать TYPE, чтобы определить, содержит ли ячейка формулу. TYPE определяет только тип результирующего или отображаемого значения. Если значение является ссылкой на ячейку, которая содержит формулу, TYPE возвращает тип результирующего значения формулы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...