无法将单元格值分配给double变量

时间:2017-09-20 14:27:30

标签: vba double

下午好,

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

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

任何帮助兄弟的想法?

由于

2 个答案:

答案 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。

希望你们能有所帮助......