Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dateien auslesen und erste 8 Zeichen als Wert zurü

Dateien auslesen und erste 8 Zeichen als Wert zurü
02.03.2017 10:23:50
soendi
Hallo XLianer,
habe ein kleines Problem, bei welchem ihr mir evneuell helfen könntet.
Ich habe einen definierten Netzwerkordner mit Lieferscheinen, welche immer gleich benannt sind (Schema "10001234 Empfänger.xlsx"). Um eine neue Lieferscheinnummer zu ziehen, schaue ich in den Ordner und trage die nächste, aufsteigende Nummer in den Lieferschein ein und speichere diesen dann entsprechend ab.
Ich weiss, dass die Dateinamen aus dem Ordner ausgelesen werden können, dann kann ich mit einer Formel die höchste Nummer ermitteln, +1 dazu zählen und so die nächste Lieferscheinnummer generieren. Ich kann das aber nur über einen Umweg, sprich über ein zusätzliches Tabellenblatt, dann eine Formel einfügen, welche mir die Dateinamen trimmt, etc. etc.
Geht das irgendwie auch direkt, dass ich nicht einfach eine Liste der Dateinamen auslese, sondern, dass das Makro mir gleich den höchsten 8-stelligen Wert von links als Variable ausgibt und ich diese in eine Zelle schreiben kann?
Falls ja... wie? :-)
Im Stile von: Lies Datei 1 aus, merke Dir die ersten 8 Zeichen, Lies Datei 2 aus und vergleiche die ersten 8 Zeichen mit den anderen 8 Zeichen, merke die ersten 8 Zeichen und vergleiche mit den anderen - ist sie höher vergleiche diese mit der nächsten Datei, etc...
Ausgabe = höchster 8-stelliger Wert +1 = Neue Lieferscheinnummer.
Danke & Grüsse
soendi

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sorry ich meinte natürlich "Hallo Soendi"
02.03.2017 11:06:27
Herbert
,,
AW: Dateien auslesen und erste 8 Zeichen ...
02.03.2017 11:14:14
soendi
Hi Herbert,
vielen Dank für das Beispiel, sowas habe ich bereits versucht umzusetzen, jedoch muss ich dazu immer den Umweg über ein leeres Tabellenblatt gehen und irgendwelche Formeln einsetzen.
Da mein Lieferschein-Formular abgesperrt ist für die normalsterblichen Benutzer (sonst wird alles kaputt gemacht) :-), müsste ich jeweils Sperrung aufheben, neues Blatt hinzufügen, alles auslesen lassen, Formeln einfügen lassen, die erstellte Nummer auslesen und am Schluss vor dem Speichern des Lieferscheins das neu erstellte Tabellenblatt wieder löschen, da dies ja eignetlich nur Mittel zum Zweck ist.
Daher bin ich auf der Suche nach einer Lösung, welche mir die Zahl gleich schon im Makro selbst eruiert und ich nicht auf Zwischenschritte angewiesen bin. Vielleicht ist das auch gar nicht machbar, war nur ein Gedanke von mir...
Trotzdem vielen Dank für die Lösung!
Grüsse
soendi
Anzeige
AW: Dateien auslesen und erste 8 Zeichen ...
02.03.2017 11:19:49
Herbert
Hi Karsten,
ein Tabellenblatt erstellen, die benötigten Formeln einsetzen, die generierte Nr auslesen und dieses Tabellenblatt dann wieder löschen, das kann man alles per Makro machen, so dass Du dann nur ein Makro starten musst und am Ende hast Du für Deine neue LS-Datei den gewünschten Namen.
Wenn Du nicht weißt, wie es geht sag bescheid, dann mache ich Dir das. Allerdings müsstest Du mir dann Dein jetziges LS-Formular senden, damit ich Dir dort das Makro einbauen kann.
Servus
AW: Dateien auslesen und erste 8 Zeichen ...
02.03.2017 11:21:36
Herbert
Was ist nur los mit mir? Jetzt habe ich schon wieder "Karsten" geschrieben! Bitte verzeih meine Schusseligkeit!
Servus
Anzeige
AW: Dateien auslesen und erste 8 Zeichen ...
02.03.2017 11:14:15
soendi
Hi Herbert,
vielen Dank für das Beispiel, sowas habe ich bereits versucht umzusetzen, jedoch muss ich dazu immer den Umweg über ein leeres Tabellenblatt gehen und irgendwelche Formeln einsetzen.
Da mein Lieferschein-Formular abgesperrt ist für die normalsterblichen Benutzer (sonst wird alles kaputt gemacht) :-), müsste ich jeweils Sperrung aufheben, neues Blatt hinzufügen, alles auslesen lassen, Formeln einfügen lassen, die erstellte Nummer auslesen und am Schluss vor dem Speichern des Lieferscheins das neu erstellte Tabellenblatt wieder löschen, da dies ja eignetlich nur Mittel zum Zweck ist.
Daher bin ich auf der Suche nach einer Lösung, welche mir die Zahl gleich schon im Makro selbst eruiert und ich nicht auf Zwischenschritte angewiesen bin. Vielleicht ist das auch gar nicht machbar, war nur ein Gedanke von mir...
Trotzdem vielen Dank für die Lösung!
Grüsse
soendi
Anzeige
AW: Dateien auslesen und erste 8 Zeichen als Wert
02.03.2017 11:29:18
Michael
Hallo!
Deinem Schema folgend müssten die Lieferscheine/Dateien im betroffenen Verzeichnis sowieso sortiert aufscheinen, etwa so:
Userbild
Dann kannst Du Dir mit folgender UDF die nächste Nummer direkt als Zellformel holen:
Function GetNextOrderNo() As Long
Const PFAD As String = "U:\test\"
Dim Datei$, Nummern$, a
Datei = Dir(PFAD & "*.xlsx", vbDirectory)
Do Until Datei = vbNullString
Nummern = Nummern & Left(Datei, 8) & ",": Datei = Dir
Loop
Nummern = Left(Nummern, Len(Nummern) - 1)
a = Split(Nummern, ",")
GetNextOrderNo = CLng(a(UBound(a)) + 1)
End Function
Der Code muss in ein allgemeines Modul, in einer Zelle rufst Du das wie gewohnt auf:
Userbild
Falls das nicht hinkommt, weil die Lieferscheine/Dateien doch nicht sortiert vorliegen (was ich nicht glaube), könnte man noch ein QuickSort dazwischenschieben.
Klappt? Gib Bescheid
LG
Michael
Anzeige
AW: Dateien auslesen und erste 8 Zeichen als Wert
02.03.2017 11:39:12
Herbert
Hallo soendi,
und wenn Du es wie folgt machst, hast Du Deine LS-Nr als Variable "LS_Nr" im Makro:
Sub NexteOrderNr()
Dim LS_Nr  As Long
LS_Nr = GetNextOrderNo()
End Sub
Function GetNextOrderNo() As Long
Const PFAD As String = "E:\1herber\test\"
Dim Datei$, Nummern$, a
Datei = Dir(PFAD & "*.xlsx", vbDirectory)
Do Until Datei = vbNullString
Nummern = Nummern & Left(Datei, 8) & ",": Datei = Dir
Loop
Nummern = Left(Nummern, Len(Nummern) - 1)
a = Split(Nummern, ",")
GetNextOrderNo = CLng(a(UBound(a)) + 1)
End Function
Servus
AW: Dateien auslesen und erste 8 Zeichen als Wert
02.03.2017 13:04:32
soendi
Hallo Michael & Herbert,
ihr seid die Grössten! Klappt bis auf das Sortieren der Dateien, die sind nach Speicherdatum sortiert und nicht nach Dateiname. Somit zieht es von der zuletzt gespeicherten Datei die Lieferscheinnummer + 1.
Wie bekomme ich die Sortierung hin, dass nach Dateiname sortiert wird?
Schöne Grüsse
soendi
Anzeige
AW: Dateien auslesen und erste 8 Zeichen als Wert
02.03.2017 14:22:18
Michael
Hallo!
Wie ich schon geschrieben habe, wirf noch ein Quicksort dazwischen:
Function GetNextOrderNo() As Long
Const PFAD As String = "U:\test\"
Dim Datei$, Nummern$, a
Datei = Dir(PFAD & "*.xlsx", vbDirectory)
Do Until Datei = vbNullString
Nummern = Nummern & Left(Datei, 8) & ",": Datei = Dir
Loop
Nummern = Left(Nummern, Len(Nummern) - 1)
a = Split(Nummern, ",")
Call QuickSort(a, LBound(a), UBound(a))
GetNextOrderNo = CLng(a(UBound(a)) + 1)
End Function
Private Sub QuickSort(ByRef ArrayToSort As Variant, ByVal Low&, ByVal High&)
Dim vPartition, vTemp, i&, j&
If Low > High Then Exit Sub
vPartition = ArrayToSort((Low + High) \ 2)
i = Low: j = High
Do
Do While ArrayToSort(i)  vPartition
j = j - 1
Loop
If i  j
If (j - Low) 
Gesamten Code in ein allgemeines Modul anstatt dem vorherigen.
LG
Michael
Anzeige
AW: Dateien auslesen und erste 8 Zeichen als Wert
02.03.2017 14:36:44
soendi
DANKE MICHAEL!!!
weiss zwar nicht, wie das QuickSort so funktioniert, ist auch schwierig rauszulesen, aber es funktioniert wirklich tadellos!
Wieder eine kleine Aufgabe weniger, die ich machen muss und mir Zeit spart!
Grüsse
soendi
AW: Dateien auslesen und erste 8 Zeichen als Wert zurü
02.03.2017 12:36:42
Piet
Hallo an alle
das ist nicht mein Thrad, aber das Thema hat mich aber interessiert, und stelle an die Kollegen und den Frager eine simple Frage: - Warum bitte den Aufwand ein Tabellenblatt zu löschen und mit Formeln arbeiten, wenn man in der Beispieldatei doch schon eine wundervolle Lösung sieht. Ich sage mal was ich meine.
Wenn ich doch schon so eine schöne Tabelle habe s. 111892 kann man so doch richtig sinnvoll nutzen!! Darunter verstehe ich diese :Tabelle als sog. Lieferschein "Übersichts Tabelle" dauerhaft zu speichern, und dort in einer bestimmten Zelle die aktuelle Lieferschein Nr. immer weiter hochzaehlen. Diese Zelle kann ausgeblendet sein, damit sie nicht versehentlich überschrieben wird
Jeden neuen Lieferschein in der Übersicht unten anhaengen, und sich die letzte LS Nummer merken!
Ist das nicht die einfachere Variante als jedesmal den ganzen Ordner aufzulisten und auszuwerten?
Ist nur ein Vorschlag von mir, damit klinke ich mich wieder aus. Schöne Grüsse an die Kollegen.
mfg Piet
Anzeige
AW: Dateien auslesen und erste 8 Zeichen als Wert zurü
02.03.2017 13:20:24
soendi
Hi Piet,
guter Einfall, jedoch funktioniert das nicht in meinem Fall.
Unsere Mitarbeiter:
Wenn etwas nicht niet- und nagelfest ist, wirds kaputtgemacht. Man füllt Formulare eher nach Zufallsprinzip aus, etc... Hirn aus = standard. Daher ist bei mir alles vom eigentlichen Formular entkoppelt (Makros nur in der PERSONLB, Datei schreibgeschützt auf einem Netzlaufwerk abgelegt.)
Ansonsten ginge das natürlich auch, werde mir das merken für das nächste Projekt.
Cheers
soendi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige