执行VBA函数时Excel错误#值

执行VBA函数时Excel错误#值,excel,vba,Excel,Vba,我构建了一个简单的函数来从字符串中收集一些值。示例字符串为“abc(1.1);abc(1.2);bac(1.3)”。目标是获取值,并最终将其相加,然后返回结果。Msgbox关于“valor”(总和)的功能非常强大,并且显示了正确的值。但是当使用这个函数时,我在单元格上得到和#值错误。你能帮我理解为什么吗 Function Organize(CellRef As String) As Double Dim i As Integer Dim lentotal As Long Dim inicio

我构建了一个简单的函数来从字符串中收集一些值。示例字符串为“abc(1.1);abc(1.2);bac(1.3)”。目标是获取值,并最终将其相加,然后返回结果。Msgbox关于“valor”(总和)的功能非常强大,并且显示了正确的值。但是当使用这个函数时,我在单元格上得到和#值错误。你能帮我理解为什么吗

Function Organize(CellRef As String) As Double

Dim i As Integer
Dim lentotal As Long
Dim inicio As Long
Dim fim As Long
Dim a As Long
Dim valor As Double
Dim check As String
a = 1
x = CellRef
lentotal = Len(x)

i = Len(x) - Len(Replace(x, ";", ""))
Dim tech(1 To 100) As Double


Do While a <= i + 1
    inicio = InStr(x, "(")
    fim = InStr(x, ")")

    'MsgBox Replace((Mid(x, inicio + 1, fim - inicio - 1)), ".", ",")
    tech(a) = Replace((Mid(x, inicio + 1, fim - inicio - 1)), ".", ",")
    If Left(x, 4) = "ABC" Then
        valor = valor + tech(a)
    End If

    If a > i Then
        MsgBox valor
        Organize = valor
        End
    Else
        x = Right(x, Len(x) - fim - 1)
    End If

    a = a + 1
Loop


End Function
函数组织(CellRef作为字符串)为双精度
作为整数的Dim i
总长度等于
像长一样暗淡
只要
暗淡如长
黯淡的勇气
作为字符串的Dim check
a=1
x=CellRef
lentotal=Len(x)
i=Len(x)-Len(替换(x,“;”,“”)
Dim tech(1至100)为双精度

做一个尝试使用
退出函数
而不是
结束

尝试使用
退出函数
而不是
结束

我认为你需要改变一些事情,至少在这个例子中:
如果LCase(左(x,3))=“abc”,那么
,因为你比较的是小写字符串,只有3个字符,并删除
结尾
。感谢@JvdV的回复。所有这些循环都运行良好,因为“MsgBox valor”给了我正确的值(我刚刚以worte ABC为例)。“结束”是在那里停止循环。
end
可能应该是
Exit Function
。是的,
end
终止整个VBA过程。你几乎不需要使用它。FWIW自定义项也不应该弹出任何
MsgBox
。我认为你需要改变一些事情,至少在这个例子中:
如果LCase(Left(x,3))=“abc”,那么
,因为你比较了小写字符串和仅3个字符,并删除了
结尾。谢谢@JvdV的回复。所有这些循环都运行良好,因为“MsgBox valor”给了我正确的值(我刚刚以worte ABC为例)。“结束”是在那里停止循环。
end
可能应该是
Exit Function
。是的,
end
终止整个VBA过程。您几乎不需要使用它。FWIW自定义项也不应该弹出任何
MsgBox