Äàííûé VBA-ìàêðîñ ïðåäíàçíà÷åí äëÿ ïîäãîòîâêè êîäîâûõ êîìáèíàöèé êîäà EAN13 äëÿ èõ ïîñëåäóþùåé ïå÷àòè øðèôòîì EanBwrP36Tt Normal.Ttf. Ìàêðîñ íóæíî ïîìåñòèòü â øàáëîí îò÷åòà «Áàçà MS Access» (ñì. ðàçäåë 15.3), èç êîòîðîãî áóäóò ïå÷àòàòüñÿ äîêóìåíû, êîäèðîâàííûå äàííûì êîäîì.
Public Sub EAN13CODE(Code, BarCode)
'
'Ï/ïðîãðàììà êîäèðîâàíèÿ êîäîì EAN13
'
Dim R As Double
Dim A, B, C, ISP
A = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
B = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
C = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")
ISP = Array(Array("A", "A", "A", "A", "A", "A"), _
Array("A", "A", "B", "A", "B", "B"), _
Array("A", "A", "B", "B", "A", "B"), _
Array("A", "A", "B", "B", "B", "A"), _
Array("A", "B", "A", "A", "B", "B"), _
Array("A", "B", "B", "A", "A", "B"), _
Array("A", "B", "B", "B", "A", "A"), _
Array("A", "B", "A", "B", "A", "B"), _
Array("A", "B", "A", "B", "B", "A"), _
Array("A", "B", "B", "A", "B", "A"))
'
' Ïðîâåðêè
'
I = Len(Code)
If I = 12 Then
'
'Ðàñ÷åò êîíòðîëüíîé öèôðû
'
CountParity = 0 '
For I = 2 To 12 Step 2 'ñêëàäûâàåì
CountParity = CountParity + Int(Mid(Code, I, 1)) '÷åòíûå öèôðû
Next I '
CountNotParity = 0 '
For I = 1 To 11 Step 2 'ñêëàäûâàåì
CountNotParity = CountNotParity + CInt(Mid(Code, I, 1)) 'íå÷åòíûå öèôðû
Next I '
ControlData = CountParity * 3 + CountNotParity 'Ñóììà öèôð íà ÷åòíûõ è íå÷åòíûõ ïîçèöèÿõ
R = ControlData / 10 'Ðåçóëüòàò äåëåíèÿ ÷åòíûõ è íå÷åòíûõ öèôð íà 10
If R - Int(R) = 0 Then 'Åñëè ÷èñëî êðàòíî 10
ControlData = 0 'òî êîíòðîëüíîå ÷èñëî íàéäåíî
Else 'åñëè íåò, òî
I = 0
Do 'äîïîëíÿåì
I = I + 1 '÷èñëî,
ControlData = ControlData + 1 'äî áëèæàéøåãî
R = ControlData / 10 'êðàòíîãî 10
If R - Int(R) = 0 Then '
ControlData = I
Exit Do
End If
Loop '
End If
ControlData = ControlData
'
'Ñáîðêà øòðèõ-êîäà
'
j = CInt(Mid(Code, 1, 1)) '(13ýë) Èñïîëíåíèå öèôðîâûõ çíàêîâ
BarCode = Chr(Asc(Mid(Code, 1, 1)) - 13) 'Ôëàã êîäà, öèôðà áåç øòðèõà
BarCode = BarCode & "!" 'Êðàåâîé çíàê
BarCode = BarCode & (A(CInt(Mid(Code, 2, 1)))) '(12ýë) âñåãäà À
For I = 1 To 5 'Êîäèðóåì ñëåäóþùèå 5 ýëåìåíòîâ
If ISP(j)(I) = "A" Then
BarCode = BarCode & (A(CInt(Mid(Code, I + 2, 1)))) 'ýëåìåíò À
Else
BarCode = BarCode & (B(CInt(Mid(Code, I + 2, 1)))) 'ýëåìåíò B
End If
Next I
BarCode = BarCode & "-" 'Ðàçäåëèòåëüíûé çíàê
For I = 8 To 12 'Êîäèðóåì ñëåäóþùèå 6 ýëåìåíòîâ
BarCode = BarCode & (C(CInt(Mid(Code, I, 1)))) '
Next I
BarCode = BarCode & C(ControlData) 'Êîíòðîëüíàÿ öèôðà
BarCode = BarCode & "!" 'Êðàåâîé çíàê
Else
'
' åñëè ÷èñëî ïîçèöèé â êîäå íå 12
'
End If
End Sub
! Ñì. òàêæå: