下午好,
我有一张包含文字和数字值的数据。我正在尝试将值分配给数组并检查它是否在某个范围内。每当我得到负数时,我都会遇到类型不匹配错误。我不确定如何将数据转换为双数据类型。这是代码片段
Sub()
Dim amount1() as double
Dim h as integer
Dim amtc as range, amtr as range
ReDim amount1(AmtR.Cells.Count)
For Each amtc In AmtR.Cells
h = h + 1
amount1(h) = amtc.Value
end sub
任何帮助兄弟的想法?
由于
答案 0 :(得分:0)
如果amtc.Value
包含Error
值,则VBA无法将其隐式转换为Double
(或任何其他类型)。
VBA将包含#VALUE!
错误的单元格的值视为特殊Error
类型。您可以使用CVErr
函数自行生成这些错误值以进行测试:
Debug.Print TypeName(CVErr(xlErrValue)) ' prints "Error"
Debug.Print VarType(CVErr(xlErrValue)) = vbError ' prints "True"
您可以使用IsError
VBA函数来确定Variant
是否包含Error
值:
If Not IsError(amtc.Value) Then amount1(h) = amtc.Value
但如果Variant
包含非数字String
,那么仍然可以为您提供类型不匹配,因此您可以使用IsNumeric
VBA函数确保类型转换成功:
If IsNumeric(amtc.Value) Then amount1(h) = amtc.Value
但它仍然是隐式类型转换。您可以使用CDbl
VBA函数显式执行类型转换:
If IsNumeric(amtc.Value) Then amount1(h) = CDbl(amtc.Value)
现在你有代码做了它所说的,说它做了什么。
答案 1 :(得分:0)
美好的一天Matt&斯科特,
我已尝试过两种解决方案,但有一点很清楚,它不是数字解决方案。现在让我感到困惑的是,我只能在负数字上格式化数据类型,但它允许我将负数转换为字符串而我是无法将字符串转换为double。
希望你们能有所帮助......