其他人是否发现以下行为?我在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
(无论如何可能更好)。
这些合法的错误还是我做错了什么?
有没有经过验证的错误编译的地方所以我不必怀疑当我看到这样的东西时我是否会发疯?
如果直接使用WorksheetFunction.IsText
而不是vArg.Value
对象,Range
似乎很好。 =CELL("type", A2)
也有效。
TYPE
函数问题似乎没有文档限制。它似乎与"Text values in formulas are limited to 255 characters."错误有关,因为documenentation Remarks提到:
您不能使用TYPE来确定单元格是否包含公式。 TYPE仅确定结果或显示值的类型。如果value是包含公式的单元格的单元格引用,则TYPE返回公式结果值的类型。
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。
所以我会得出结论,你的功能没有做你想象的那样。
一直发生在我身上。