宏返回#REF!在excel中

时间:2013-09-10 12:33:45

标签: excel vba excel-vba

我不知道这是否是提出这样一个问题的地方,但由于它是关于某些VBA脚本的,我认为可能。

我一直在写这个宏功能:

Function Mod10(tl As String) As Byte

    Dim c(13) As Integer
    Dim er As Integer

    c(13) = Mid(tl, 14, 1) * 2
    c(12) = Mid(tl, 13, 1)
    c(11) = Mid(tl, 12, 1) * 2
    c(10) = Mid(tl, 11, 1)
    c(9) = Mid(tl, 10, 1) * 2
    c(8) = Mid(tl, 9, 1)
    c(7) = Mid(tl, 8, 1) * 2
    c(6) = Mid(tl, 7, 1)
    c(5) = Mid(tl, 6, 1) * 2
    c(4) = Mid(tl, 5, 1)
    c(3) = Mid(tl, 4, 1) * 2
    c(2) = Mid(tl, 3, 1)
    c(1) = Mid(tl, 2, 1) * 2
    c(0) = Mid(tl, 1, 1)

    For i = 0 To 13
        If c(i) > 9 Then
            c(i) = CInt(Left(c(i), 1)) + CInt(Right(c(i), 1))
        End If
    Next

    er = 0
    For i = 0 To 13
        er = er + c(i)
    Next

    Mod10 = 10 - er Mod 10

End Function

但正如你在这张照片中所见:

enter image description here

它会返回错误#REF!。我在fx中写这个:=Mod10(a1)

脚本可在此处找到:http://kronsell.net/fikkontrol.htm(丹麦语网站) 它用于计算字符串的最后一位数。有点像计算EAN-13代码时,只是另一种计算。

如果有VBA或EXCEL知识的人可以告诉我该怎么做,我真的很感激。

1 个答案:

答案 0 :(得分:5)

不确定原因,但看起来Mod10是保留关键字。我尝试将函数重命名为Mod_10并且它有效。

enter image description here

如果您在模块顶部按住Option Explicit,则可能需要声明一些变量。

尝试此操作并从=MOD_10(A1)

的单元格中调用它
   Function MOD_10(tl As String) As Byte

    Dim i As Long
    Dim c(13) As Integer
    Dim er As Integer

    c(13) = Mid(tl, 14, 1) * 2
    c(12) = Mid(tl, 13, 1)
    c(11) = Mid(tl, 12, 1) * 2
    c(10) = Mid(tl, 11, 1)
    c(9) = Mid(tl, 10, 1) * 2
    c(8) = Mid(tl, 9, 1)
    c(7) = Mid(tl, 8, 1) * 2
    c(6) = Mid(tl, 7, 1)
    c(5) = Mid(tl, 6, 1) * 2
    c(4) = Mid(tl, 5, 1)
    c(3) = Mid(tl, 4, 1) * 2
    c(2) = Mid(tl, 3, 1)
    c(1) = Mid(tl, 2, 1) * 2
    c(0) = Mid(tl, 1, 1)

    For i = 0 To 13
        If c(i) > 9 Then
            c(i) = CInt(Left(c(i), 1)) + CInt(Right(c(i), 1))
        End If
    Next

    er = 0
    For i = 0 To 13
        er = er + c(i)
    Next

    MOD_10 = 10 - er Mod 10

End Function