Excel:type()和WorksheetFunction.IsText()对于长字符串失败

时间:2018-11-03 03:27:39

标签: excel vba excel-vba

其他人是否发现以下行为?我正在Windows 7下运行Excel 2007。

在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

type()的返回值2和16分别具有meaning“文本”和“错误值”。 vbString的返回值8(= VarType())具有meaning“ String”。

因此,如果传递给它们的参数超过255个字符,则Excel中的type()和Excel VBA中的WorksheetFunction.IsText()似乎不起作用。 Excel中的IsText()没有此限制。 WorksheetFunction.IsText()失败的一种解决方法是测试VarType(...) = vbString(无论如何可能会更好)。

这些合法的错误还是我做错了什么?

是否有编译经过验证的错误的地方,所以当我看到类似的东西时,我不必怀疑自己是否会发疯?

2 个答案:

答案 0 :(得分:0)

如果直接使用WorksheetFunction.IsText而不是vArg.Value对象,则

Range似乎很好。 =CELL("type", A2)也可以。

TYPE函数问题似乎是未记录的限制。它似乎与"Text values in formulas are limited to 255 characters."错误有关,因为documenentation Remarks提到:

  

您不能使用TYPE来确定单元格是否包含公式。   TYPE仅确定结果或显示的值的类型。   如果value是对包含公式TYPE的单元格的单元格引用   返回公式结果值的类型。

答案 1 :(得分:0)

解决方法!? (不!)

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”中放置什么,总会得出TRUE。

因此,我得出的结论是您的功能没有按照您的预期做

一直在我身上