Hallo zusammen,
ich möchte gern edifact Dateien öffnen, einen string auslesen und anhand des strings die Datei gezielt in einen Ordner verschieben.
Das habe ich bisher (durch stöbern in anderen Foren) als Lösung.
Kann den Pfad finden, wo alle Dateien liegen, aber das Öffnen, Suchen des Strings, Vergleichen mit Liste und verschieben, das bekomme ich nicht hin.
Sub openFiles()
Dim path As String
Dim pattern As String
Dim file As String
Dim strPath As String
Dim strSearch As String
Dim strPathFile As String
strPathFile = Application.GetOpenFilename
'Trennzeichen bestimmen
If InStr(strPathFile, „/“) > 0 Then
strSearch = „/“
Else
strSearch = „“
End If
'Dateiname extrahieren
strPath = Left$(strPathFile, InStrRev(strPathFile, strSearch))
'Rückgabe
path = strPath
pattern = „*.txt“
file = Dir(path & pattern)
Do While file „“
MsgBox file 'Hier Verarbeitung einfügen
file = Dir
>Hier müsste irgendwie die Verarbeitung der Datei rein, öffnen, string suchen und mit einer Liste bekannter Strings vergleichen und entsprechend in einen Ordner verschieben. Wenn String nicht in Liste, dann in einen Ordner Namens „unbekannt“ verschieben.
TextDat.Close
Loop
End Sub
Der String befindet sich in der Textdatei zwischen dem 2. und 3. Doppelpunkt. Er ist 13stellig und besteht nur aus Zahlen.
Die Liste zum Vergleichen ist wie folgt aufgebaut:
Spalte1 | Spalte2
Nummer | Ordner
9800000000000 | G:\Allgemein\9800000000000
9800000000001 | G:\Allgemein\9800000000001
Vielen Dank schon mal für Hilfen und Anregungen.
Gruß
Jens
Excel VBA?
Hallo Jens,
wenn Du mit angibst, womit Du Dein Projekt realisieren möchtest, wird Deine Frage auch von den Leuten gelesen, die Dir helfen können.
strPathFile = Application.GetOpenFilename
Das deutet auf Excel VBA hin. Richtig? Dann musst Du nur noch verraten, welche Excel Vrsion.
Gruß Rainer
Der String befindet sich in der Textdatei zwischen dem 2. und
3. Doppelpunkt. Er ist 13stellig und besteht nur aus Zahlen.
Die Liste zum Vergleichen ist wie folgt aufgebaut:
Spalte1 | Spalte2
Nummer | Ordner
9800000000000 | G:\Allgemein\9800000000000
9800000000001 | G:\Allgemein\9800000000001
Hallo Jens,
wo ist der 2. und 3.te Doppelpunkt?
Gruß
Reinhard
Hallo Rainer,
es ist Excel 2003 in dem ich das mit VBA realisieren möchte.
Danke und Gruß
Jens
Der String befindet sich in der Textdatei zwischen dem 2. und
3. Doppelpunkt. Er ist 13stellig und besteht nur aus Zahlen.
Die Liste zum Vergleichen ist wie folgt aufgebaut:
Spalte1 | Spalte2
Nummer | Ordner
9800000000000 | G:\Allgemein\9800000000000
9800000000001 | G:\Allgemein\9800000000001
Hallo Jens,
wo ist der 2. und 3.te Doppelpunkt?
Hallo Reinhard,
in der Textdatei ist eine Zeile Text mit allem möglichen Kram drin. Aber zwischen dem Zweiten und Dritten Doppelpunkt steht die Nummer.
„UNB+UNOA:3+9870000000018:502+9870000000001:502+090812:2021+9071029651++++++0’UNH+9071029651+ORDRSP…“
Gruß
Jens
Hallo Reinhard,
Die Liste zum Vergleichen ist wie folgt aufgebaut:
Spalte1 | Spalte2
Nummer | Ordner
9800000000000 | G:\Allgemein\9800000000000
9800000000001 | G:\Allgemein\9800000000001
wo ist der 2. und 3.te Doppelpunkt?
das ist die Liste (wo immer die auch steht, ich vermute ein Listen-Steuerelement) in der den Nummernkreisen Verzeichnisse zugeordnet werden.
Die Daten, die gelesen werden, können etwa so oder ähnlich aussehen:
BGM+380:::X+237624:X:X+9+AA’
Hier würde die Nummer zwischen dem 2. Plus und 4. Doppelpunkt stehen.
Die ganze Datei ist ein langer String, das Ende einer Zeile markiert das Apostroph.
Gruß Rainer
PS. OT. Code tippen kann ich nicht, mein Notebook ist abgeraucht. Ich sitze am Mac. 
in der Textdatei ist eine Zeile Text mit allem möglichen Kram
drin. Aber zwischen dem Zweiten und Dritten Doppelpunkt steht
die Nummer.
„UNB+UNOA:3+9870000000018:502+9870000000001:502+090812:2021+9071029651++++++0’UNH+9071029651+ORDRSP…“
Hallo Jens,
nachfolgender Code zeigt an:
502+9870000000001
Und nun, steht die 13stellige Nummer immer ganz rechts oder was erwartet da einen?
Sub tt()
Dim Satz As String, S() As String
Satz = „UNB+UNOA:3+9870000000018:502+9870000000001:502+090812:2021+9071“
S = Split(Satz, „:“)
MsgBox S(2)
End Sub
Gruß
Reinhard
Hallo Jens,
nachfolgender Code zeigt an:
502+9870000000001
Und nun, steht die 13stellige Nummer immer ganz rechts oder
was erwartet da einen?
Sub tt()
Dim Satz As String, S() As String
Satz =
„UNB+UNOA:3+9870000000018:502+9870000000001:502+090812:2021+9071“
S = Split(Satz, „:“)
MsgBox S(2)
End Sub
Gruß
Reinhard
ja die nummer steht dann immer rechts.
Die Liste zum Vergleichen habe ich noch nicht erstellt.
Kann eine xls, oder csv werden die ich im selben Ordner, wie die Exceldatei mit dem Makro ablege.
Danke!
Das ist mal ein Auszug aus einer txt.
UNB+UNOA:3+9870000000018:502+9870000000001:502+090812:2021+9071029651++++++0’UNH+9071029651+ORDRSP
die nummer nach dem 2. Doppelpunkt und vor dem 3. ist 9870000000001
Nebenbei, weil das schon zu Problemen bei der EDV geführt hatte:
Das Apostroph beendet keine Zeile, es wird aber in den meisten Beschreibung zur Übersicht als Zeilenende verwendet. Ein Zeilenumbruch darf dort nicht erfolgen. Wenn so eine Datei mit Zeilenumbruch auf einen Konverter trifft, der Zeilenumbrüche nicht kennt, dann gibts Schwierigkeiten…
Hier würde die Nummer zwischen dem 2. Plus und 4. Doppelpunkt
stehen.
Die ganze Datei ist ein langer String, das Ende einer Zeile
markiert das Apostroph.
Gruß Rainer
PS. OT. Code tippen kann ich nicht, mein Notebook ist
abgeraucht. Ich sitze am Mac. 
?? was heißt OT.?
Hallo zusammen,
nun bin ich etwas weiter.
Das Problem ist, ich weiß nicht, wie ich eine Datei nach der anderen öffne, den String in der Liste suche, die Datei schließe und entsprechend der Fundstelle in der Liste verschiebe in einen anderen Ordner.
Kann hier jemand ein paar Tipps geben?
Danke, jens
Sub openFiles()
Dim path As String
Dim pattern As String
Dim file As String
Dim strPath As String
Dim strSearch As String
Dim strPathFile As String
Dim Satz As String, S() As String
strPathFile = Application.GetOpenFilename '„G:\VN-B-EDM\Blumberg\Excel\Alocatsdurchsuchenmakro“
'Trennzeichen bestimmen
If InStr(strPathFile, „/“) > 0 Then
strSearch = „/“
Else
strSearch = „“
End If
'Dateiname extrahieren
strPath = Left$(strPathFile, InStrRev(strPathFile, strSearch))
'Rückgabe
path = strPath
pattern = „*.txt“
file = Dir(path & pattern)
Do While file „“
MsgBox file 'Hier Verarbeitung einfügen
file = Dir
dateinummer = FreeFile
'!!!Beim 2. Durchlauf klappts hier nicht mehr.
Open file For Output As #dateinummer
Satz = „UNB+UNOA:3+9870000000018:502+9870000000001:502+090812:2021+9071“
S = Split(Satz, „:“)
A = Right(S(2), 13)
MsgBox A
Close #dateinummer
'TextDat.Close
Loop
End Sub
Hallo,
Das ist mal ein Auszug aus einer txt.
UNB+UNOA:3+9870000000018:502+9870000000001:502+090812:2021+9071029651++++++0’UNH+9071029651+ORDRSP
ja, das sieht etwa aus wie die Daten, die mein Programm schreibt.
die nummer nach dem 2. Doppelpunkt und vor dem 3. ist
9870000000001
Nebenbei, weil das schon zu Problemen bei der EDV geführt
hatte:
Das Apostroph beendet keine Zeile, es wird aber in den meisten
Beschreibung zur Übersicht als Zeilenende verwendet. Ein
Zeilenumbruch darf dort nicht erfolgen. Wenn so eine Datei mit
Zeilenumbruch auf einen Konverter trifft, der Zeilenumbrüche
nicht kennt, dann gibts Schwierigkeiten…
Das war nur als Erklärung für Reinhard. Daß da kein Zeilenumbruch steht, hatte ich mit geschrieben.
PS. OT. Code tippen kann ich nicht, mein Notebook ist
abgeraucht. Ich sitze am Mac. 
?? was heißt OT.?
Off Topic. Eine Info für Reinhard, die mit Deinem Problem nur sekundär zu tun hat. Reinhard weiß jetzt, daß ich nicht viel helfen kann.
Gruß Rainer
und wie ich die Daten aus der *.txt lese, so dass ich die Varibale Satz auswerten kann. Das fehlt mir auch.
Danke!
Jens