无法将单元格值分配给双精度变量



下午好,

我有一张包含文本和数字值的数据表。我正在尝试将值分配给数组并检查它是否在某个范围内。每当我得到负数时,我都会收到类型不匹配错误。我不确定如何将数据转换为双精度数据类型。下面是一段代码

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"

您可以使用IsErrorVBA 函数来确定Variant是否包含Error值:

If Not IsError(amtc.Value) Then amount1(h) = amtc.Value

但是,如果Variant包含非数字String,这仍然会给您带来类型不匹配,因此您可以使用IsNumericVBA 函数来确保类型转换成功:

If IsNumeric(amtc.Value) Then amount1(h) = amtc.Value

不过,这仍然是一个隐式类型转换。可以使用CDblVBA 函数显式执行类型转换:

If IsNumeric(amtc.Value) Then amount1(h) = CDbl(amtc.Value)

现在,您拥有了执行其所说的操作并说明其操作的代码。

美好的一天马特和斯科特,

我已经尝试了这两种解决方案,很明显的一件事是它不是数字。现在让我感到困惑的是,只有在负数上,我无法格式化数据类型,但它允许我将负数转换为字符串,而我无法将字符串转换为双精度数。

希望你们能有所启发...

最新更新