WinFuture-Forum.de: Excel VBA - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Office
Seite 1 von 1

Excel VBA möchte eine Prüfsumme berechnen


#1 Mitglied ist offline   Thomynator 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.455
  • Beigetreten: 20. Februar 08
  • Reputation: 36
  • Geschlecht:Männlich
  • Wohnort:Traunreut

geschrieben 28. Oktober 2010 - 11:53

Hallo an Alle erst mal.

Also:
ich habe Excel 2003 und erstelle eine "benutzerdefinierte Funktion" mit folgendem VBA Code (da is auch die Berechnung drin....

Public Function Interleaved_2_of_5(Zahl As Range) As Variant 
       
Dim intIndex As Integer
       
Dim lngSum As Long
       
Dim blnSwitch As Boolean
       
If IsNumeric(Zahl.Text) Then
               
For intIndex = Len(Zahl.Text) To 1 Step -1
                       
If Not blnSwitch Then
                                lngSum
= lngSum + CInt(Mid$(Zahl.Text, intIndex, 1)) * 3
                       
Else
                                lngSum
= lngSum + CInt(Mid$(Zahl.Text, intIndex, 1))
                       
End If
                        blnSwitch
= Not blnSwitch
               
Next
                lngSum
= lngSum Mod 10
               
If CBool(Len(Zahl.Text) + Len(CStr(lngSum)) Mod 2) Then
                       
Interleaved_2_of_5 = CDbl(Zahl.Text & "0" & CStr(lngSum))
               
Else
                       
Interleaved_2_of_5 = CDbl(Zahl.Text & CStr(lngSum))
               
End If
       
ElseIf Not IsEmpty(Zahl.Value) Then
               
Interleaved_2_of_5 = "Keine Zahl !"
       
End If
End Function


So. Die Benutzerdefinierte Funktion wird auch erkannt und ich kann Sie nutzen. nur die Prüfsumme funktioniert nicht so recht.

Habe ein BSP: 0030449299002030 --> Prüfsumme ist 05 (also nur 5, aber da 2of5 Interleaved Modulo 10 nur grade stellen macht, setz ich da ne 0 davor)
aber wenn ich das mitn Excel mach bekomme ich das hier raus: 003044929900203000

die beiden nullen davor müssen sein (systembarcode zum abscannen) aber wo ist bitte mein Fehler wegen dem Prüfcode?

Hoffe mir ist zu helfen =)

lg

Tommy

Dieser Beitrag wurde von Thomynator bearbeitet: 28. Oktober 2010 - 12:00

0

Anzeige



#2 Mitglied ist offline   egal8888 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.036
  • Beigetreten: 23. September 10
  • Reputation: 25
  • Geschlecht:Männlich

geschrieben 28. Oktober 2010 - 12:40

Falsch:

Zitat

If CBool(Len(Zahl.Text) + Len(CStr(lngSum)) Mod 2) Then
Interleaved_2_of_5 = CDbl(Zahl.Text & "0" & CStr(lngSum))
Else
Interleaved_2_of_5 = CDbl(Zahl.Text & CStr(lngSum))
End If


Richtig:

Zitat

If CBool(Len(Zahl.Text) + Len(CStr(lngSum)) Mod 2) Then
Interleaved_2_of_5 = Zahl.Text & "0" & CStr(lngSum)
Else
Interleaved_2_of_5 = Zahl.Text & CStr(lngSum)
End If

Dieser Beitrag wurde von egal8888 bearbeitet: 28. Oktober 2010 - 12:42

0

#3 Mitglied ist offline   Thomynator 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.455
  • Beigetreten: 20. Februar 08
  • Reputation: 36
  • Geschlecht:Männlich
  • Wohnort:Traunreut

geschrieben 28. Oktober 2010 - 12:50

wow... das ging schnell =)

funktioniert einwandfrei =)

Vielen herzlichen Dank =)
0

#4 Mitglied ist offline   Thomynator 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.455
  • Beigetreten: 20. Februar 08
  • Reputation: 36
  • Geschlecht:Männlich
  • Wohnort:Traunreut

geschrieben 09. November 2010 - 12:19

So... muss das Thema leider noch mal hoch holen... es gibt momentan ein kleines Problem bei der Prüfziffer "0" wenn die Prüfziffer, wie in diesem Beispiel:

0005675453000010

null ist, bekomme ich hinten anstatt der "00" diese Ausgabe "010"
(komplett 0005675453000010010)

der aktuelle Code ist dieser hier:
Public Function Interleaved_2_of_5(Zahl As Range) As Variant
       
Dim intIndex As Integer
       
Dim lngSum As Long
       
Dim blnSwitch As Boolean
       
If IsNumeric(Zahl.Text) Then
               
For intIndex = Len(Zahl.Text) To 1 Step -1
                       
If Not blnSwitch Then
                                lngSum
= lngSum + CInt(Mid$(Zahl.Text, intIndex, 1)) * 1
                       
Else
                                lngSum
= lngSum + CInt(Mid$(Zahl.Text, intIndex, 1)) * 3
                       
End If
                        blnSwitch
= Not blnSwitch
               
Next
                lngSum
= lngSum Mod 10
               
If CBool(Len(Zahl.Text) + Len(CStr(lngSum)) Mod 2) Then
                       
Interleaved_2_of_5 = Zahl.Text & "0" & CStr(10 - lngSum)
                       
Else
                       
Interleaved_2_of_5 = Zahl.Text & "0" & CStr(10 - lngSum)
                       
End If
       
ElseIf Not IsEmpty(Zahl.Value) Then
               
Interleaved_2_of_5 = "Keine Zahl !"
       
End If
End Function


kann mir da noch wer helfen? bin grad verwirrt..
das Problem könnte sein, dass ich sage "CStr(10 - lngSum)"
aber sowas in der Art brauche ich, da die anderen Prüfziffern (außer 0 und 5) nicht korrekt ausgegeben werden (sprich die lngSum ist "2" und die Prüfziffer die stehen muss ist die differenz von 10 zu der summe... nur wenn die berechnete Zahl null ist heißt es ja 10-0 =10 --> theoretisch richtig, nur stehen darf da nur die letzte Ziffer, sprich "0")
hmm...

Vielen Dank schon mal...

lg

Tommy

Dieser Beitrag wurde von Thomynator bearbeitet: 09. November 2010 - 12:23

0

#5 Mitglied ist offline   egal8888 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.036
  • Beigetreten: 23. September 10
  • Reputation: 25
  • Geschlecht:Männlich

geschrieben 09. November 2010 - 13:22

Wenn ich Dich richtig verstanden hab, dann müsste das sein, was Du möchtest:

If CBool(Len(Zahl.Text) + Len(CStr(lngSum)) Mod 2) Then
 
Interleaved_2_of_5 = Zahl.Text & "0" & IIf(lngSum > 0, CStr(10 - lngSum), "0")
Else
 
Interleaved_2_of_5 = Zahl.Text & "0" & IIf(lngSum > 0, CStr(10 - lngSum), "0")
End If

0

#6 Mitglied ist offline   Thomynator 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.455
  • Beigetreten: 20. Februar 08
  • Reputation: 36
  • Geschlecht:Männlich
  • Wohnort:Traunreut

geschrieben 09. November 2010 - 13:37

aah genau. das habe ich gesucht, vielen Dank..

(wobei ich da hätte auch selber drauf kommen können is ja nur ne wenn dann quasi -.-)

:huh:

Trotzdem mega thx

Dieser Beitrag wurde von Thomynator bearbeitet: 09. November 2010 - 13:38

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0