I use this in VBA.

Just need to use one of this function and use a EAN13 or EAN8 font.

Hope it helps.


Public Function EAN8(ctrl_chaine) As String
  'V 1.0.0
  'Paramètres : une chaine de 7 chiffres
  'Parameters : a 7 digits length string
  'Retour : * une chaine qui, affichée avec la police EAN13.TTF, 
donne le code barre
  '         * une chaine vide si paramètre 
fourni incorrect
  'Return : * a string which give the bar code when it is dispayed 
with EAN13.TTF font
  '         * an empty string if the supplied 
parameter is no good
  Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
  EAN8 = ""
  chaine = CStr(ctrl_chaine)
  'Vérifier qu'il y a 7 caractères
  'Check for 7 characters
  If Len(chaine) = 7 Then
    'Et que ce sont bien des chiffres
    'And they are really digits
    For i% = 1 To 7
&nbsp; &nbsp; &nbsp; If Asc&#40;Mid$&#40;chaine, i%, 1&#41;&#41; <48> 57 Then
&nbsp; &nbsp; &nbsp; &nbsp; i% = 0
&nbsp; &nbsp; &nbsp; &nbsp; Exit For
&nbsp; &nbsp; &nbsp; End If
&nbsp; &nbsp; Next
&nbsp; &nbsp; If i% = 8 Then
&nbsp; &nbsp; &nbsp; 'Calcul de la clé de contrôle
&nbsp; &nbsp; &nbsp; 'Calculation of the checksum
&nbsp; &nbsp; &nbsp; For i% = 7 To 1 Step -2
&nbsp; &nbsp; &nbsp; &nbsp; checksum% = checksum% + Val&#40;Mid$&#40;chaine, 
i%, 1&#41;&#41;
&nbsp; &nbsp; &nbsp; Next
&nbsp; &nbsp; &nbsp; checksum% = checksum% * 3
&nbsp; &nbsp; &nbsp; For i% = 6 To 1 Step -2
&nbsp; &nbsp; &nbsp; &nbsp; checksum% = checksum% + Val&#40;Mid$&#40;chaine, 
i%, 1&#41;&#41;
&nbsp; &nbsp; &nbsp; Next
&nbsp; &nbsp; &nbsp; chaine = chaine & &#40;10 - checksum% Mod 10&#41; Mod 10
&nbsp; &nbsp; &nbsp; 'Les 4 premier chiffre viennent de la table A
&nbsp; &nbsp; &nbsp; 'The first 4 digits come from table A
&nbsp; &nbsp; &nbsp; CodeBarre$ = "&#58;"&nbsp; &nbsp;'Ajout marque de début / 
Add start mark
&nbsp; &nbsp; &nbsp; For i% = 1 To 4
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CodeBarre$ = CodeBarre$ & Chr$&#40;65 + 
Val&#40;Mid$&#40;chaine, i%, 1&#41;&#41;&#41;
&nbsp; &nbsp; &nbsp; Next
&nbsp; &nbsp; &nbsp; CodeBarre$ = CodeBarre$ & "*"&nbsp; &nbsp;'Ajout 
séparateur central / Add middle separator
&nbsp; &nbsp; &nbsp; For i% = 5 To 8
&nbsp; &nbsp; &nbsp; &nbsp; CodeBarre$ = CodeBarre$ & Chr$&#40;97 + 
Val&#40;Mid$&#40;chaine, i%, 1&#41;&#41;&#41;
&nbsp; &nbsp; &nbsp; Next
&nbsp; &nbsp; &nbsp; CodeBarre$ = CodeBarre$ & "+"&nbsp; &nbsp;'Ajout de la 
marque de fin / Add end mark
&nbsp; &nbsp; &nbsp; EAN8 = CodeBarre$
&nbsp; &nbsp; End If
&nbsp; End If
End Function

Public Function ean13&#40;ctrl_chaine&#41; As String
&nbsp; 'Cette fonction est régie par la Licence Générale Publique Amoindrie 
GNU &#40;GNU LGPL&#41;
&nbsp; 'This function is governed by the GNU Lesser General Public License 
&#40;GNU LGPL&#41;
&nbsp; 'V 1.1.1
&nbsp; 'Paramètres &#58; une chaine de 12 chiffres
&nbsp; 'Parameters &#58; a 12 digits length string
&nbsp; 'Retour &#58; * une chaine qui, affichée avec la police EAN13.TTF, 
donne le code barre
&nbsp; '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* une chaine vide si paramètre 
fourni incorrect
&nbsp; 'Return &#58; * a string which give the bar code when it is dispayed 
with EAN13.TTF font
&nbsp; '&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* an empty string if the supplied 
parameter is no good
&nbsp; Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
&nbsp; ean13 = ""
&nbsp; chaine = ctrl_chaine
&nbsp; 'Vérifier qu'il y a 12 caractères
&nbsp; 'Check for 12 characters
&nbsp; If Len&#40;chaine&#41; = 12 Then
&nbsp; &nbsp; 'Et que ce sont bien des chiffres
&nbsp; &nbsp; 'And they are really digits
&nbsp; &nbsp; For i% = 1 To 12
&nbsp; &nbsp; &nbsp; If Asc&#40;Mid$&#40;chaine, i%, 1&#41;&#41; <48> 57 Then
&nbsp; &nbsp; &nbsp; &nbsp; i% = 0
&nbsp; &nbsp; &nbsp; &nbsp; Exit For
&nbsp; &nbsp; &nbsp; End If
&nbsp; &nbsp; Next
&nbsp; &nbsp; If i% = 13 Then
&nbsp; &nbsp; &nbsp; 'Calcul de la clé de contrôle
&nbsp; &nbsp; &nbsp; 'Calculation of the checksum
&nbsp; &nbsp; &nbsp; For i% = 12 To 1 Step -2
&nbsp; &nbsp; &nbsp; &nbsp; checksum% = checksum% + Val&#40;Mid$&#40;chaine, 
i%, 1&#41;&#41;
&nbsp; &nbsp; &nbsp; Next
&nbsp; &nbsp; &nbsp; checksum% = checksum% * 3
&nbsp; &nbsp; &nbsp; For i% = 11 To 1 Step -2
&nbsp; &nbsp; &nbsp; &nbsp; checksum% = checksum% + Val&#40;Mid$&#40;chaine, 
i%, 1&#41;&#41;
&nbsp; &nbsp; &nbsp; Next
&nbsp; &nbsp; &nbsp; chaine = chaine & &#40;10 - checksum% Mod 10&#41; Mod 10
&nbsp; &nbsp; &nbsp; 'Le premier chiffre est pris tel quel, le deuxième vient 
de la table A
&nbsp; &nbsp; &nbsp; 'The first digit is taken just as it is, the second one 
come from table A
&nbsp; &nbsp; &nbsp; CodeBarre$ = Left$&#40;chaine, 1&#41; & Chr$&#40;65 + 
Val&#40;Mid$&#40;chaine, 2, 1&#41;&#41;&#41;
&nbsp; &nbsp; &nbsp; first% = Val&#40;Left$&#40;chaine, 1&#41;&#41;
&nbsp; &nbsp; &nbsp; For i% = 3 To 7
&nbsp; &nbsp; &nbsp; &nbsp; tableA = False
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Select Case i%
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 3
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Select Case first%
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 0 To 3
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tableA = True
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End Select
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 4
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Select Case first%
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 0, 4, 7, 8
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tableA = True
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End Select
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 5
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Select Case first%
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 0, 1, 4, 5, 9
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tableA = True
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End Select
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 6
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Select Case first%
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 0, 2, 5, 6, 7
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tableA = True
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End Select
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 7
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Select Case first%
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Case 0, 3, 6, 8, 9
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tableA = True
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End Select
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End Select
&nbsp; &nbsp; &nbsp; &nbsp;If tableA Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CodeBarre$ = CodeBarre$ & Chr$&#40;65 + 
Val&#40;Mid$&#40;chaine, i%, 1&#41;&#41;&#41;
&nbsp; &nbsp; &nbsp; &nbsp;Else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CodeBarre$ = CodeBarre$ & Chr$&#40;75 + 
Val&#40;Mid$&#40;chaine, i%, 1&#41;&#41;&#41;
&nbsp; &nbsp; &nbsp; &nbsp;End If
&nbsp; &nbsp; &nbsp;Next
&nbsp; &nbsp; &nbsp; CodeBarre$ = CodeBarre$ & "*"&nbsp; &nbsp;'Ajout 
séparateur central / Add middle separator
&nbsp; &nbsp; &nbsp; For i% = 8 To 13
&nbsp; &nbsp; &nbsp; &nbsp; CodeBarre$ = CodeBarre$ & Chr$&#40;97 + 
Val&#40;Mid$&#40;chaine, i%, 1&#41;&#41;&#41;
&nbsp; &nbsp; &nbsp; Next
&nbsp; &nbsp; &nbsp; CodeBarre$ = CodeBarre$ & "+"&nbsp; &nbsp;'Ajout de la 
marque de fin / Add end mark
&nbsp; &nbsp; &nbsp; ean13 = CodeBarre$
&nbsp; &nbsp; End If
&nbsp; End If
End Function




-------------------- m2f --------------------

--
http://www.openobject.com/forum/viewtopic.php?p=57335#57335

-------------------- m2f --------------------


_______________________________________________
Tinyerp-users mailing list
http://tiny.be/mailman2/listinfo/tinyerp-users

Reply via email to