是否可以使VBA宏在文件级运行?

是否可以使VBA宏在文件级运行?,vba,excel,Vba,Excel,我在想些什么 我有一个VBA宏Excel代码,检查唯一的公民身份号码,并返回它是否正确 但要启动它,我必须在启动Excel时调用宏,按ALT+F11,然后按F5,然后输入代码,编译代码,然后在Excel函数中输入函数Check_JMBG(adr),我可以在Excel工作表中调用它 但当我启动其他Excel文件时,我必须再次为此创建宏 现在我想知道一个例子,我可以做,我如何使我的功能立即出现在那里,当我启动一些其他Excel文件,并立即调用它,就像它是内置的 调用函数的示例:Check_JMBG(

我在想些什么

我有一个VBA宏Excel代码,检查唯一的公民身份号码,并返回它是否正确

但要启动它,我必须在启动Excel时调用宏,按ALT+F11,然后按F5,然后输入代码,编译代码,然后在Excel函数中输入函数Check_JMBG(adr),我可以在Excel工作表中调用它

但当我启动其他Excel文件时,我必须再次为此创建宏

现在我想知道一个例子,我可以做,我如何使我的功能立即出现在那里,当我启动一些其他Excel文件,并立即调用它,就像它是内置的

调用函数的示例:Check_JMBG(A1),在A1中输入并填充为文本:2003969265121

以下是检查唯一公民身份号码的代码:

' Function for checking JMBG validation
Function Check_JMBG(JMBG As String) As String
    If (Len(JMBG) <> 13) Then
        Check_JMBG = "ERROR: Length of JMBG is not 13!"
    ElseIf Not IsNumeric(JMBG) Then
        Check_JMBG = "ERROR: JMBG contains non-numerical characters"
    ElseIf Not fctBlnCheckDate(JMBG) Then
        Check_JMBG = "ERROR: Wrong date entered!"
    ElseIf fctBlnCheckSum(JMBG) Then
        Check_JMBG = "ERROR: Wrong checksum!"
    Else
        Check_JMBG = "JMBG is correct"
    End If
End Function
' Function to check JMBG day, month, year validation
Private Function fctBlnCheckDate(JMBG As String) As Boolean
    Dim intDay As Integer, intMonth As Integer, intYear As Integer
    Dim datCheck As Date

    intDay = Int(Left(JMBG, 2))
    intMonth = Int(Mid$(JMBG, 3, 2))
    intYear = Int(Mid$(JMBG, 5, 3)) + 1000

    datCheck = DateSerial(intYear, intMonth, intDay)

    fctBlnCheckDate = _
        (Year(datCheck) = intYear) And _
        (Month(datCheck) = intMonth) And _
        (Day(datCheck) = intDay)

End Function
' Function to check JMBG control number and control sum
Private Function fctBlnCheckSum(JMBG As String) As Boolean
    Dim intCheckSum As Integer, i As Integer

    For i = 1 To 13
        intCheckSum = intCheckSum + Int(Mid$(JMBG, i, 1)) * (IIf(i < 7, 8, 14) - i)
    Next
    fctBlnCheckSum = (intCheckSum Mod 11) <> 0
End Function
用于检查JMBG验证的函数 函数检查_JMBG(JMBG作为字符串)作为字符串 如果(Len(JMBG)13)那么 Check_JMBG=“错误:JMBG的长度不是13!” 如果不是数字(JMBG),则 选中_JMBG=“错误:JMBG包含非数字字符” 如果不是fctBlnCheckDate(JMBG),则 选中_JMBG=“错误:输入的日期错误!” ElseIf fctBlnCheckSum(JMBG)然后 Check_JMBG=“错误:校验和错误!” 其他的 检查_JMBG=“JMBG是正确的” 如果结束 端函数 '用于检查JMBG日、月、年验证的函数 作为布尔值的私有函数fctBlnCheckDate(JMBG作为字符串) Dim intDay为整数,intMonth为整数,intYear为整数 Dim datCheck As Date intDay=Int(左(JMBG,2)) intMonth=Int(中期美元(JMBG,3,2)) intYear=Int(中期美元(JMBG,5,3))+1000 datCheck=DateSerial(intYear、intMonth、intDay) fctBlnCheckDate=_ (年份(datCheck)=intYear)和_ (月(datCheck)=intMonth)和_ (Day(datCheck)=intDay) 端函数 '用于检查JMBG控制编号和控制总和的函数 私有函数fctBlnCheckSum(JMBG作为字符串)作为布尔值 Dim intCheckSum作为整数,i作为整数 对于i=1到13 intCheckSum=intCheckSum+Int(Mid$(JMBG,i,1))*(IIf(i<7,8,14)-i) 下一个 fctBlnCheckSum=(intCheckSum Mod 11)0 端函数 是

您需要制作一个外接程序

参见

另请参阅或