ich würde mich freuen, wenn mir jemand in diesem speziellen Fall helfen kann
ich spiele die Daten eines Scanners in eine Excel-Tabelle ein. Die Werte werden untereinander in einer Spalte angezeigt. Ich muss die Werte aber in eine Tabelle formatieren.
Ich scanne zu erst einen Stellplatz und dann den Karton, der auf diesem Stelllplatz steht. Es kommt aber auch vor, dass mehrere Kartons auf einem Stellplatz stehen.
07.02.2024, 12:24 (Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2024, 12:25 von HKindler.)
Hi,
woran kann man erkennen, was Stellplatz und was Karton ist?
Darf es VBA sein? Falls ja, solltest du entweder fähig sein, das auf deine Tabelle anzupassen oder eine Beispieldatei hier einstellen, die genau dem Aufbau deiner Datei entspricht.
Wie kommen die Daten vom Scanner in Excel? gibt es da schon eine VBA-Routine? Falls ja, wäre es sinnvoll gleich bei dieser anzusetzen. Falls nein (der Scanner also bloß Tastaturersatz ist), solltest du Karton und Stellplatz in zwei verschieden Spalten scannen. Dann könnte man das auch per Formel lösen.
Die Kartons und der Stellplatz unterscheiden sich in der Nummernsystematik: Kartons 9-stellig Steallplatz 11-Stellig
Die Scaner produzieren eine Textdatei. In dieser sind die Werte auch alle untereinander. Soabald ich diese im Excel-öffne sind die werte in einer Spalte. Ich kann den Scanner also nicht so einstellen, dass die Werte in unterschiedliche Spalten gescannt werden.
Mit VBA kenne ich mich leider nicht aus. Ich habe mal die Beispiel TXT-Datei und die Ziel-Excel-Datei hochgeladen. Vielleicht kannst du damit etwas anfangen?
kopiere die Daten deiner Textdatei in das Beispiel Spalte E. Dann drücke den Button. Ob du VBA verstehtst spielt keine Rolle. Dein Atuo funktioniert, auch wenn du nichts von Motoren verstehst! Leider ist es eine alte Excel 2003 Datei. Das Makro kannst du in deine Originaldatei in ein Modul kopieren.
mfg Gast 123
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28 • crssft
Ich muss die Excel dann noch weiter bearbeiten und per SVERWEIS noch Daten hinzufügen. Wenn das Auslesen der Text-Datei so "einfach" funktioniert, vielleicht kannst du mir dann auch bei der weiteren Bearbeitung der Excel behilflich sein?
Ich habe wieder eine Beispiel-Datei angehängt.
Zur Erklärung: In der Datenbank steht der alte Stellplatz. In der Scanner-Datei wird dann der neue Stellplatz angescannt. Für den späteren Import benötige ich eine Excel, wo sowohl der alte als auch der neue Stellplatz enthalten ist.
Tabellenreiter "Import": Das müsste die fertige Tabelle sein, die wir dann zum weiteren Import nutzen Tabellenreiter "Datenbank": Diese Daten ziehe ist aus der bestehenden Datenbank.
Am Besten würde auch das vorherige VBA (Text-Datei in Spalten) in der selben Excel-Datei mit verarbeitet werden.
Wenn das alles per VBA funktionierten würde, dann würde mir das den Tag retten
07.02.2024, 16:13 (Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2024, 16:13 von HKindler.)
Hi,
hier meine Lösung zu deinem Ursprungsproblem...
Code:
Sub Einlesen() Dim i As Long Dim Eingabe As String Dim Stellplatz As String i = Tabelle1.Cells(1, 1).CurrentRegion.Rows.Count + 1 With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = False .ButtonName = "Öffnen" .Filters.Add "Text-Datei", "*.txt" .FilterIndex = 2 .InitialFileName = ActiveWorkbook.Path .Title = "Text-Datei auswählen" If .Show Then Open .SelectedItems(1) For Input As #1 Do While Not EOF(1) Line Input #1, Eingabe Eingabe = Replace(Replace(Left(Eingabe, 15), " ", ""), vbTab, "") If Len(Eingabe) = 11 Then Stellplatz = Eingabe Else With Tabelle1 .Cells(i, 1) = Stellplatz .Cells(i, 2) = Eingabe i = i + 1 End With End If Loop Close #1 End If End With End Sub
Unterschiede zur Lösung von Gast:
Die Text-Datei wird ausgewählt und direkt geöffnet. Man muss sie nicht händisch in die Excel-Datei einfügen
Bereits vorhandene Einträge werden nicht überschrieben.
Die vereinzelt vorhandenen Tabulatoren werden nicht übertragen.
Die Unterscheidung zwischen Stellplatz und Karton erfolgt anhand der Länge und nicht anhand des Minus-Zeichens.
@Gast 123: Wieso deklarierst du globale Variablen? Wieso verwendest du 2x If-Then-EndIf anstatt If-Then-Else-EndIf ?
@Helmut wenn ich mir deine Programmierung ansehe, ich musste sie zweimal lesen, steht ausser Frage wer der bessere Programmierer ist. An den Code mit Datei Öffnen komme ich nicht heran, der ist mir zu hoch. Stört mich aber nicht im geringsten. IF Else habe ich einfach übersehen, so einfach. Dim AC + lz1 immer nach ganz oben setzen ist eine Marotte von mir, verwende ich seit Jahren.
Alten und neuen Stellplatz zuweisen ist kein Problem, sofern die Barcode/ Seriennr. in der Datenbank mit der Chargen/ Serien Nr. in der Textdatei identisch ist. Ich gehe mal davon aus und habe ein zweites Beispiel programmiert. Bei mir muss man leider die Text-Datei nach Spalte H kopieren. Vielleicht fällt Helmut dazu ein besserer Code ein. Mir soll es Recht sein.
mfg Gast 123
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28 • crssft
ich mach das Programmieren nur hobbymäßig. Das mit dem Filedialog habe ich auch irgendwo abgeschaut. Und der Rest ist hier nur reine Anwendung allgemeiner Programmierregeln. Das mit dem "Datei als Text" öffnen, musste ich auch erst nochmals nachschlagen. Open xxx For Input As #y hatte ich noch im Hinterkopf und dass man damit Zeilen in Strings lesen kann auch. Aber die Details, wie man das macht, die habe ich der Online-Hilfe entnommen.
Dann habe ich den Rest geschrieben. Sprich die ersten 15 Zeichen übernommen und die Leerzeichen durch nichts ersetzt. Und dann habe ich mich gewundert, dass ich nur 2 Zeile statt der erwarteten 3 bekommen habe. Erst längeres debuggen hat dann gezeigt, dass in Datei nicht nur Leerzeichen, sondern auch Tabulatoren enthalten sind. Und beim letzten Eintrag führt das dann dazu, dass die Kartonnummer plötzlich 11 statt 9 Zeichen hat, somit als Stellplatz erkannt wird und nur dieser neu gemerkt wird. Da keine weitere Kartonnummer kommt, wird dieser "Stellplatz" niemals ausgegeben. Lösung war dann, die Tabulatoren ebenfalls durch nichts zu ersetzen.
Du siehst, ist alles nur eine Frage der Ausdauer.
So zum neuen Problem: Dein Code sieht auf den ersten Blick gut aus. Da mir aber noch nicht ganz klar ist, was crssft genau will, mach ich mich nicht daran da etwas zu programmieren.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • crssft
zur Zeit von CPM, als Commodore 64 aufkam, lernte ich in Mascvhinensprache Dateien zu öffnen und zu bearbieten. Schrieb mir ein eigenes Programm, nur um gelöschte Dateien aufzulisten, konnte sie auch reaktivieren.
Mein grösster Cou, ich knackter den Passwortschutz, indem ich auf meiner 5 1/4 " Diskette nur drei Byts änderte. Mein Chef war baff erstaunt, als er Dateien des Ingenieurs nicht öffnen konnte, meine Diskette sie problemlos öffnete. Der Trick, ich ersetzte bei Z80 CPU den Sprungbefehl zum Passwortschutz durch drei NOP = 00. Lang, lang ist es her. Bei den heutigen modernen CPU Befehlen habe ich aber keinen Durchblick mehr. Zu kompliziert geworden.
Die Variante von HKindler habe ich leider nicht ganz verstanden, weil ich es nicht hinbekommen habe, dass die TXT-Datei dann irgendwie gleich geöffnet wird.
Ich habe nun die Variante von Gast123 getestet. Und es funktioniert wunderbar. Einzig, ich hatte in der Spalte "Menge" eine wenn-Funktion reingeschrieben, dass wenn ein Serienbarcode in der Zeile vorhanden ist, eine 1 eingetragen wird, ansonsten bleibt die Zelle Leer. Die Wenn-Funktion wird durch die programmierte Funktion leider immer wieder überschrieben.
Das Makro habe ich in eine Excel mit neurer Version hineinkopiert. Das Makro läuft auch dort nur leider ist dann immer wieder ein Bezug zu der 2003er-Excel da, den ich nicht herausbekomme. Aber wir können auch die 2003er Version nutzen. Die Excel-Datei die Dank eurer Hilfe entstanden ist, kann ich zwar nicht in unser System importieren (akzeptiert keine EXCEL mit Makro), aber ich kann die Daten dann einfach in eine Excel ohne Makro kopieren.
Kurzum: Einige kleine Workarounds gibt es noch, aber so wie es jetzt ist, ist es schon mehr, als ich erwartet hatte