Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Benötige Hilfe bei RegExp Muster$

Begonnen von omron2003, November 13, 2025, 08:24:14

⏪ vorheriges - nächstes ⏩

omron2003

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

Doming

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

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Normalo0815

#3
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
Freundliche Grüße
Normalo0815   :)

omron2003

Hallo Normalo0815,

Super danke für schnelle die Hilfe, jetzt funktioniert es.

Gruß
omron2003

Normalo0815

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.
Freundliche Grüße
Normalo0815   :)