Neuigkeiten:

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

Mobiles Hauptmenü

Barcode in Variale speichern, zerlegen und an Textfeld übergeben

Begonnen von omron2003, Dezember 01, 2016, 11:58:17

⏪ vorheriges - nächstes ⏩

omron2003

Hallo Forum,
derzeit scanne ich einen Barcode [Format: (01)AB012345(02)1234567890(0123)000025]
in ein Textfeld [Textfeld1] über das Ereignis: BeforeUpdate zerlege ich den Barcode
und übergebe diesen an zwei weitere Textfelder  [Textfeld2] und [Textfeld3] mit folgendem CODE
Me.Textfeld2 = Format(Mid([Textfeld1], 3, 8), ,,@@@@-@@@@")
Me.Textfeld3 = Mid([Textfeld1], 13, Instr([Textfeld1], "0123") -12)


Ist es Möglich den Barcode statt in das Textfeld1 in eine Variable zu speichern und dann zu zerlegen und an die Textfelder1 und 2 zu übergeben?

Hier der CODE von Textfeld1:

Private Sub Barcode_BeforeUpdate(Cancel As Integer)
If Not Me!Textfeld1 Like "01AB01*" Then
     MsgBox "Die MaterialNr ist ungültig!" & vbCrLf & "prüfen ob die Umschalt Taste an der Tastatur aktiviert ist!" & vbCrLf & "ansonsten falsches Material gescannt...", vbInformation, "ACHTUNG"
     Me.Undo
  Else
   Me. Textfeld2 = Format(Mid([Textfeld1], 3, 8), "@@@@-@@@@")
   Me. Textfeld3 = Mid([Textfeld1], 13, InStr([Textfeld1], "0123") - 12)
  End If
  Me.UF1.Visible = True
End Sub[code]
[/code]
Gruß
Omron2003

crystal

Hallo,
textfeld1 wird nur dann gespeichert, wenn es an die Tabelle gebunden ist. Hebst du diese Bindung auf (Steuerelemeninhalt löschen), erhälst du ein ungebundenes Textfeld, mit dem du arbeiten kannst, ohne dass es gespeichert  wird.

Statt im Event beforeUpdate sollte das auch "bei Änderung = change" klappen.

lg
crystal

PS: Wusste nicht, dass es in VBA auch einen LIKE-Operator gibt. Wieder was gelernt.
PPS: In deinem Code geht's etwas durcheinander mit "Barcode" und Textfeld1, oder?
PPPs: ... es wäre die Umschalt-Taste, nicht die Schaltfläche...
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Lachtaube

In irgendein Textfeld musst Du scannen, denn der Scanner wird vermutlich Tastatureingaben emulieren. Das Textfeld kann aber eine Breite und Höhe von 0 cm haben - wichtig ist nur, dass es den Fokus empfangen kann. Das Vor Aktualisierung Ereignis kannst abbrechen, in dem Cancel auf einen Wert <> 0 gesetzt wird. Ausserdem wird ein Undo benötigt, damit das Textfeld leer bleibt. Vor dem Undo solltest Du den Wert des Textfelds an eine im Formularmodul deklarierte Variable oder IMHO besser noch an eine eigene Methode zur Aufarbeitung des gescannten Codes übergeben, die dann die Restaufgabe übernimmt.
Grüße von der (⌒▽⌒)

omron2003

#3
ich habe es jetzt soweit zum laufen gebracht mit einen ungebundenem Textfeld1,
leider bekomme ich bei folgendem CODE,
Me.Textfeld3 = Mid([Textfeld1], 13, InStr([Textfeld1], "0123") - 12)
einen Laufzeitfehler 5: Ungültiger Prozeduraufruf oder ungültiges Argument
Woran könnte das liegen?


edgar.basler

Vielleicht eine blöde Idee:

Hier "Me. Textfeld3 " ist ein Leerzeichen dazwischen ....

omron2003

Sorry,
das war ein Fehler von mir hier im Code,
im Orginal Code ist kein Leerzeichen vorhanden.

Gruß
Omron2003

Beaker s.a.

Hallo,
Liegt wohl daran, dass
InStr([Textfeld1], "0123") - 12
einen Wert < 0 zurück gibt.
I.Ü. würde ich auch das Textfeld1 mit Me. referenzieren.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

Zeige doch einmal das Ergebnis einiger Scan-Vorgänge und passend dazu, wie die Aufteilung erfolgen soll. Ggf. Regel mit angeben.
Grüße von der (⌒▽⌒)

Beaker s.a.

Hallo,
Mit seinem Beispiel aus dem OP erhalte ich im Direktfenster

s="(01)AB012345(02)1234567890(0123)000025"
?Format(Mid(s, 3, 8), "@@@@-@@@@")
1)AB-0123
?Mid(s, 13, InStr(s, "0123") - 12)
Laufzeitfehler 5, wie beim TS, was IMO daran liegt
?InStr(s, "0123")-12
-5
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

crystal

...
Ob da vielleicht

InStr([Textfeld1], "(0123)") - 12

helfen würde?
...

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Beaker s.a.

Hallo crystal,
In der Tat.
Wollte ihn nur selber drauf kommen lassen, dass die Zeichenfolge "0123" da zweimal
drinsteckt  ;)
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

Und wenn ich mir grad nochmal das Ergebnis angeschaut habe
Zitat(02)1234567890(
vermute ich sogar, dass
ZitatInStr([Textfeld1], "(0123)") - 13
den gewünschten Teilstring liefert.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

omron2003

#12
Hallo,
Sorry das Problem scheint am Barcode zu liegen,
denn wenn die erste Ziffer nach (02) eine 0 ist bekommen ich diesen Laufzeitfehler 5?
(01)AB012345(02)0123456789(0123)000025]
Da der hier im Forum gepostete String nicht der original(wieder etwas dazugelernt) ist war mir das mit der 0 nicht aufgefallen.
Gibt es hierfür eine Lösung?

Besten Dank im Voraus
Omron2003

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

omron2003

der Original Code lautet:
Me.VD_Charge = Mid([Barcode_VD], 13, InStr([Barcode_VD], "3100") - 13

scanne ich diesen Barcode:
(91) RX089123 (10) 0131234567 (3100) 000180
wird der Laufzeitfehler 5 erzeugt

beim Scannen von diesem funktioniert die Übergabe.
Also nehme ich an das der Laufzeitfehler durch die vorstehenden 0 zwischen (10) und (3100) liegt
(91) RX089123 (10) 1131234567 (3100) 000180

die in Klammer stehenden Ziffern in Barcode bedeuten,
(91) = Material
(10) = Charge
(3100) = Menge
werden für meinem Zweck aber nicht Gebrauch.

Gruß
Omron2003