0

私は何か疑問に思っていました。

一意の市民権番号をチェックし、それが正しいかどうかを返す VBA マクロ Excel コードが 1 つあります。

しかし、それを開始するには、Excel の起動時にマクロを呼び出し、F5 よりも ALT+F11 を押してコードを入力し、コンパイルする必要があります。その後、関数 Check_JMBG(adr) が Excel 関数に入力され、呼び出すことができます。それを 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
4

1 に答える 1

0

はい。

アドインを作成する必要があります。

http://support.microsoft.com/kb/151490を参照してください

于 2013-02-07T09:14:47.847 に答える