• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Code uit excel 2003 werkt niet meer in excel 2010

  • Onderwerp starter Onderwerp starter erka
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

erka

Verenigingslid
Lid geworden
8 dec 2004
Berichten
53
Goedemorgen,

Ik heb een zeer groot Excel bestand, ooit gemaakt in Excel 2003 met een "geleend" stukje code. deze code zorgt er voor dat in plaats van de nummers van een barcode (bv 871245301595 ) in combinatie met het juiste lettertype (EAN13) een streepjescode in een cel wordt weergegeven.

Dit stukje code werkte in Excel 2003 altijd prima, maar geeft bij de overgang naar Excel 2010 een foutmelding en werkt niet meer.

Foutmelding: "Kan het project of de bibliotheek niet weergeven"

Het kan best zo zijn dat de fout voortkomt uit het feit dat het stukje code Franstalig is, maar ik kom hier niet uit. Mijn kennis van VBA is wat dat betreft beperkt.

Het bestand zelf is te gevoelig (en te groot) om hier te uploaden, kan iemand mij helpen zonder dat ik het bestand hier deel?

Of weet iemand een eenvoudigere manier om cijfers om te zetten naar een printbare EAN 13 Barcode?

alvast bedankt!


Hieronder het stukje code.


Code:

{Public Function ean13$(chaine$)
'V 1.0
'Paramètres : une chaine de 12 chiffres
'Retour : * une chaine qui, affichée avec la police EAN13.TTF, donne le code barre
' * une chaine vide si paramètre fourni incorrect
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
ean13$ = ""
'Vérifier qu'il y a 12 caractères
If Len(chaine$) = 12 Then
'Et que ce sont bien des chiffres
For i% = 1 To 12
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
i% = 0
Exit For
End If
Next
If i% = 13 Then
'Calcul de la clé de contrôle
For i% = 2 To 12 Step 2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 1 To 11 Step 2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
'Le premier chiffre est pris tel quel, le deuxième vient de la table A
CodeBarre$ = Left$(chaine$, 1) & Chr$(65 + Val(Mid$(chaine$, 2, 1)))
first% = Val(Left$(chaine$, 1))
For i% = 3 To 7
tableA = False
Select Case i%
Case 3
Select Case first%
Case 0 To 3
tableA = True
End Select
Case 4
Select Case first%
Case 0, 4, 7, 8
tableA = True
End Select
Case 5
Select Case first%
Case 0, 1, 4, 5, 9
tableA = True
End Select
Case 6
Select Case first%
Case 0, 2, 5, 6, 7
tableA = True
End Select
Case 7
Select Case first%
Case 0, 3, 6, 8, 9
tableA = True
End Select
End Select
If tableA Then
CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
Else
CodeBarre$ = CodeBarre$ & Chr$(75 + Val(Mid$(chaine$, i%, 1)))
End If
Next
CodeBarre$ = CodeBarre$ & "*" 'Ajout séparateur central
For i% = 8 To 13
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+" 'Ajout de la marque de fin
ean13$ = CodeBarre$
End If
End If
End Function}
 
Laatst bewerkt:
Geen idee of je er wat aan hebt (ben zelf ook geen Office/VBA goeroe) maar Google bracht me bij de volgende Microsoft pagina: deze
Staat wel voor Office 2002, maar ik zou vermoeden dat de sectie Oplossing ook werkt in andere versies van Office.

Geeft trouwens het idee dat er zaken niet aanwezig/beschikbaar zijn in jouw Excel2010 die wél aanwezig/beschikbaar waren in jouw Excel2003. Ik denk aan invoegtoepassingen, geldige database-koppelingen etc. Vraag je dus af of de werkomgeving van Excel2010 wel hetzelfde is als (toendertijd) in Excel2003 (zelfde invoegtoepassingen, zelfde (lage) beveiligingsinstellingen, database-servers en/of bestandspaden/netwerkschijfletters hetzelfde gebleven, beschikbare lettertypes etc.)

Tijs.
 
Laatst bewerkt:
De code zelf lijkt me solide an sich. Alleen worden aanduidingen als % en $ veelal niet meer gebruikt. Ik vermoed dat het niet de code an sich is, maar de locatie en of verwijzing. Je kunt eens proberen deze code in een "schone" 2010 file te gooien
 
Nog even inhakend op mijn vorige posting: Alles nakijken qua omgeving, met extra aandacht voor de beveiligingsinstellingen van Excel. Zou zomaar kunnen dat dáár de problemen vandaan komen (allerlei blokkades vanwege beveiligingsinstellingen die je in Excel 2003 niet had maar die er wel zijn in Excel 2010).
Ik begin hier over omdat we bij mijn opdrachtgever (toevallig ook) bezig zijn met de overgang Office 2003 naar 2010 en ik daar flink tegen aangelopen ben.

Tijs.
 
Het kan best zo zijn dat de fout voortkomt uit het feit dat het stukje code Franstalig is

Dat is het zeker niet; de code is gewoon engels, het commentaar is franstalig (alles achter een ' is commentaar)

Ron
 
Hallo,

allen bedankt voor de reacties en het meedenken. ik heb het oorspronkelijke bestand weer gevonden, krijg het alleen in Excel 2010 nog niet werkend.
ik heb het bestand reeds "geconverteerd" naar een nieuwe excel versie, en de oude versie zoals hij in excel 2003 werkte...

Het EAN lettertype kan ik niet uploaden, maar ook met een ander lettertype moeten de gegevens in cel B7 anders worden als de gegevens in cel A7 worden aangepast...
 

Bijlagen

Laatst bewerkt:
Kun je in je eerste post de VBA code nog even tussen codetags zetten voor de leesbaarheid ?

In het werkblad roep je een funktie aan met een naam die met een underscore begint. Zo'n funktie bestaat niet.
Verwijder in het werkblad de underscore.

Mij lijkt dit voldoende:

Code:
Public Function ean13_0(c00)
  ean13_0 = ""
  
  If Len(c00) = 12 And Len(Format(Val(c00))) = 12 Then
      For j = 2 To 12 Step 2
        c01 = c01 + Val(Mid(c00, j, 1))
        c02 = c02 + Val(Mid(c00, j - 1, 1))
      Next
      c00 = c00 & (10 - (3 * c01 + c02) Mod 10) Mod 10
      
      c03 = Left(c00, 1) & Chr(65 + Val(Mid(c00, 2, 1)))
     For j = 3 To 13
        c03 = c03 & Chr(75 + IIf(j > 7, 22, IIf(InStr("_30_31_32_33_40_44_47_48_50_51_54_55_59_60_62_65_66_67_70_73_76_78_79_", "_" & j & Left(c00, 1) & "_"), 10, 0)) + Val(Mid(c00, j, 1)))
     Next
      ean13_0 = Left(c03, 7) & "*" & Mid(c03, 8) & "+"
  End If
End Function
 
Laatst bewerkt:
Na enig worstelen met de beveiliging en macro is het gelukt!

bedankt voor het meedenken!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan