Onderwerp


De Europese Artikel Nummering of EAN code is een streepjescode (ook wel "barcode") die wereldwijd wordt toegepast bij artikelcodering in winkels. Voor een project bij een kruidenier had ik een controlemiddel nodig op ingevoerde EAN codes. Het opstellen van een functie werd me te lastig, het maken van een VBA procedure was een stuk eenvoudiger. Bij deze de VBA procedure voor de controle op EAN 13 codes. De uitleg over de controle kun je vinden op deze website en met een beetje handigheid kun je de andere EAN controles hier zelf uit afleiden. Meer informatie over EAN kun je op deze website vinden.



Informatie


Kopieer de volgende procedure en plaats deze in een module van de VBA Editor. Plaats een opdrachtknop op werkblad Data en wijs deze procedure aan die knop toe. Door op de knop te klikken controleert de procedure de EAN code in cel A1 op werkblad Data. Bij een ongeldige EAN code verschijnt er een mededeling.

Private Sub Check_EAN_13()
Dim wsData As Worksheet
Set wsData = ThisWorkbook.Worksheets("Data")

Dim blEAN As Boolean

Dim intEAN_01 As Integer
Dim intEAN_02 As Integer
Dim intEAN_03 As Integer
Dim intEAN_04 As Integer
Dim intEAN_05 As Integer
Dim intEAN_06 As Integer
Dim intEAN_07 As Integer
Dim intEAN_08 As Integer
Dim intEAN_09 As Integer
Dim intEAN_10 As Integer
Dim intEAN_11 As Integer
Dim intEAN_12 As Integer

'ONEVEN Totaal
Dim intEAN_O As Integer
'EVEN Totaal
Dim intEAN_E As Integer
'SubTotaal
Dim intEAN_T As Integer
'Controle getal
Dim intEAN_C As Integer

'DEEL I
'Bepaal de ONEVEN & EVEN delen van de EAN code
'Dit gebeurt van rechts naar links; het 1e integer is dus het 12de getal van de code


'ONEVEN
intEAN_01 = Mid(wsData.Cells(1, 1), 12, 1)
intEAN_03 = Mid(wsData.Cells(1, 1), 10, 1)
intEAN_05 = Mid(wsData.Cells(1, 1), 8, 1)
intEAN_07 = Mid(wsData.Cells(1, 1), 6, 1)
intEAN_09 = Mid(wsData.Cells(1, 1), 4, 1)
intEAN_11 = Mid(wsData.Cells(1, 1), 2, 1)

'EVEN
intEAN_02 = Mid(wsData.Cells(1, 1), 11, 1)
intEAN_04 = Mid(wsData.Cells(1, 1), 9, 1)
intEAN_06 = Mid(wsData.Cells(1, 1), 7, 1)
intEAN_08 = Mid(wsData.Cells(1, 1), 5, 1)
intEAN_10 = Mid(wsData.Cells(1, 1), 3, 1)
intEAN_12 = Mid(wsData.Cells(1, 1), 1, 1)

'DEEL II
'Tel alle ONEVEN waarden op een vermenigvuldig die met 3
intEAN_O = (intEAN_01 + intEAN_03 + intEAN_05 + intEAN_07 + intEAN_09 + intEAN_11) * 3

'DEEL III
'Tel alle EVEN waarden op
intEAN_E = (intEAN_02 + intEAN_04 + intEAN_06 + intEAN_08 + intEAN_10 + intEAN_12)

'DEEL IV
'Tel de uitkomst van DEEL II en DEEL III bij elkaar op
intEAN_T = intEAN_O + intEAN_E

'DEEL V
'Bereken het Controle getal
intEAN_C = 10 - (intEAN_T Mod 10)

If intEAN_C <> Right(wsData.Cells(1, 1), 1) Then
'Toon een mededeling bij een ongeldige EAN code
MSG = "De " & wsData.Cells(9, cColData) & " is ongeldig."
MSG = MSG & Chr(9) & Chr(13) & "Wijzig de huidige EAN of voer een nieuwe EAN in."
TTL = ApplicationName
STL = vbCritical + vbOKOnly
RSP = MsgBox(MSG, STL, TTL)
With wsData.Cells(1, 1)
.Select
End With
blEAN = True
End If
End Sub