下午好,
我有一张包含文本和数字值的数据表。我正在尝试将值分配给数组并检查它是否在某个范围内。每当我得到负数时,我都会收到类型不匹配错误。我不确定如何将数据转换为双精度数据类型。下面是一段代码
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
有什么想法可以帮助兄弟吗?
谢谢
如果amtc.Value
包含Error
值,VBA 无法将其隐式转换为Double
(或任何其他类型)。
包含#VALUE!
错误的单元格的值将被 VBA 视为特殊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)
现在,您拥有了执行其所说的操作并说明其操作的代码。
美好的一天马特和斯科特,
我已经尝试了这两种解决方案,很明显的一件事是它不是数字。现在让我感到困惑的是,只有在负数上,我无法格式化数据类型,但它允许我将负数转换为字符串,而我无法将字符串转换为双精度数。
希望你们能有所启发...