Hallo Forum,
folgenden Code zerlegt mir den eingescannten Barcode und übergibt das Ergebnis an Textfelder (Submatches) aus.
Barcode Aufbau:
(91)RX411020(10)1001234567(3100)1200 oder
(91)RX411020(10)1001234567(3102)1200
(91)RX411020(10)1001234567(3103)1200
(91)RX411020(10)1001234567(3110)1200
Wie kann ich das Muster$ optimieren alle auch (3102) und (3103) zugelassen werden.
Hier mein derzeitiger CODE:
Private Sub BarcodeSuche_BeforeUpdate(Cancel As Integer)
Const CLSID_RegExp = "{3F4DACA4-160D-11D2-A8E9-00104B365C9F}"
Const MUSTER$ = "91(\w{8})10([\w-]{6,10})31[01]0(\w{6})" ' bei den Codeteil 31[01]0 ist es möglich den Barcode mit 3100 und 3110 zu scannen udn zerlegen
With CreateObject("new:" & CLSID_RegExp)
.Pattern = MUSTER
If .Test(Me.BarcodeSuche) Then
With .Execute(Me.BarcodeSuche)(0)
If .Submatches.Count = 3 Then
Me.Originalmenge = .Submatches(2)
Me.Charge = .Submatches(1)
Me.txt_MaterialNr = .Submatches(0)
Me.Menge = Me.Originalmenge
Me.VorgangsDatum = Date
Me.MaterialNr = Me.txt_MaterialNr
Me.CoTaStID_F = Me.txt_CoTaStID_F
End If
End With
Else
MsgBox "Keineübereinstimmung"
End If
End With
Exit Sub
End Sub
Besten Dank im Voraus
omron2003
Hallo Omron,
zum einen: Dein Code wird lesbarer wenn Du ihn (ohne Leerzeichen) mit [ code ] beginnst und mit [ /code ] beendest, dann bleibt die Formatierung erhalten.
Ohne Deinen RegExp jetzt zu analysieren, wenn Der Barcode immer gleich lang ist, kannst Du ihn dann nicht mit Me.Textfeld = Mid(Barcode, 4, 4) usw. zerlegen?
Gruß
Doming
Zitat von: omron2003 am November 13, 2025, 08:24:14Wie kann ich das Muster$ optimieren alle auch (3102) und (3103) zugelassen werden.
[...]
Const MUSTER$ = "91(\w{8})10([\w-]{6,10})31[01]0(\w{6})" ' bei den Codeteil 31[01]0 ist es möglich den Barcode mit 3100 und 3110 zu scannen udn zerlegen
Nur mal so "geraten":
Const MUSTER$ = "91(\w{8})10([\w-]{6,10})31[01][023](\w{6})" Das würde allerdings auch 3112 und 3113 zulassen.
Hallo omron2003,
wenn tatsächlich nur die 3100, 3102, 3103, 3110 zugelassen werden sollen, dann vielleicht so (dabei auch das seltsame [\w-] in deinem Muster durch ein \w ersetzt):
91(\w{8})10(\w{6,10})31(00|02|03|10)(\w{6})
Da dadurch aber vier Submatches entstehen würden, müsste auch der restliche Code noch angepasst werden:
Private Sub BarcodeSuche_BeforeUpdate(Cancel As Integer)
Const CLSID_RegExp$ = "{3F4DACA4-160D-11D2-A8E9-00104B365C9F}"
Const MUSTER$ = "91(\w{8})10(\w{6,10})31(00|02|03|10)(\w{6})"
With CreateObject("new:" & CLSID_RegExp)
.Pattern = MUSTER
If .Test(Me.BarcodeSuche) Then
With .Execute(Me.BarcodeSuche)(0)
If .Submatches.Count = 4 Then ' anstatt 3
Me.Originalmenge = .Submatches(3) ' anstatt 2
Me.Charge = .Submatches(1)
Me.txt_MaterialNr = .Submatches(0)
Me.Menge = Me.Originalmenge
Me.VorgangsDatum = Date
Me.MaterialNr = Me.txt_MaterialNr
Me.CoTaStID_F = Me.txt_CoTaStID_F
End If
End With
Else
MsgBox "Keineübereinstimmung"
End If
End With
End Sub
Hallo Normalo0815,
Super danke für schnelle die Hilfe, jetzt funktioniert es.
Gruß
omron2003
Hallo omron2003,
Zitat von: Normalo0815 am November 13, 2025, 10:24:59dabei auch das seltsame [\w-] in deinem Muster durch ein \w ersetzt)
Wenn der Barcode auch
Bindestriche (-) enthalten kann, dann mach diese kleine Änderung im Muster wieder rückgängig.
Also das Muster dann:
Const MUSTER$ = "91(\w{8})10([\w-]{6,10})31(00|02|03|10)(\w{6})"Ich hatte das in meinem Post #3 leider nicht in Erwägung gezogen.
Alles andere bleibt gleich.