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

问题描述 投票:2回答:2

其他人是否发现以下行为?我在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“Text”和“Error value”。 vbString的返回值8(= VarType())具有meaning“String”。

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

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

有没有经过验证的错误编译的地方所以我不必怀疑当我看到这样的东西时我是否会发疯?

excel vba excel-vba
2个回答
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返回公式结果值的类型。


0
投票

A Workaround!? (Nope!)

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。

所以我会得出结论,你的功能没有做你想象的那样。

一直发生在我身上。

© www.soinside.com 2019 - 2024. All rights reserved.