我不知道这是否是提出这样一个问题的地方,但由于它是关于某些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
但正如你在这张照片中所见:
它会返回错误#REF!
。我在fx中写这个:=Mod10(a1)
。
脚本可在此处找到:http://kronsell.net/fikkontrol.htm(丹麦语网站) 它用于计算字符串的最后一位数。有点像计算EAN-13代码时,只是另一种计算。
如果有VBA或EXCEL知识的人可以告诉我该怎么做,我真的很感激。
答案 0 :(得分:5)
不确定原因,但看起来Mod10
是保留关键字。我尝试将函数重命名为Mod_10
并且它有效。
如果您在模块顶部按住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