[Excel/VBA]Neueste Datei auslesen und Automatisch hochzählen

Sylar

Commander
Registriert
März 2011
Beiträge
2.804
Halllo!

Ich hab hier folgende Aufgabe und hoffe ihr könnts mir dabei helfen.

Also ich habe in einem Netzwerkordner ein Ordner mit Dateien drinnen die so aufgebaut sind:

Ordner A\
001 - Auto.xls
002 - Laptop.xls
003 - Auto.xls
usw.

Der Aufbau der Dateiname ist für die ersten 6 Zeichen immer gleich nur die ersten 3 Zeichen ändern sich fortlaufend.

Ich möchte in Excel via VBA ein Code schreiben, der mir in den Netzwerkordner Ordner A geht und nachschaut welche Dateie die höchte Nummer hat und dann Automatisch +1 addieren und in eine Zelle schreiben.

Nachdem das der Fall ist, soll er bei der Funktion speichern Automatisch den Dateiname erstellen.

zB Ordner B hat jetzt folgende Dateien:
123 - Laptop.xls
124 - Handy.xls

Die neue Datei soll dann 125 - *alter Dateiname*.xls automatisch erstellen.

Mein Code nur zur Speicherung der Datei
Code:
Sub Speichern()

Dim fso As New FileSystemObject
Set fso = New FileSystemObject

Dim fileName As String
Dim fileSaveName As String
Dim filepath As String
Dim CellValue As String

CellValue = Cells(8, 1).Value [B]Auslesen der Zelle A8[/B]

Cells(8, 1).Value = "Rechnungs - Nr : " + Right(CellValue, 5) [B]*Speichert den Text und liest den Wert der letzten 5 Zeichen der Celle A8 aus*[/B]
fileName = Application.ActiveWorkbook.Name


fileName = Mid(fileName, 5, 15) [B]*Datei Name Speichern, aber noch sehr viele Probleme, da ich nicht weiß, wie man variable Namenlänge deklarieren kann*[/B]

fileSaveName = Application.GetSaveAsFilename(Right(CellValue, 3) + " - " + fileName, "Microsoft Excel (*.XLSX),*.XLSX")
'3 für die letzten 3 zeichen

End Sub

Folgende Probleme hab ich hier noch:
1. Da die Länge der Dateiname unterschiedlich sind, weiß ich nicht, wie man die Länge der Dateiname so ausließt, dass sie nach "200 - " beginnt und vor .xlsx aufhört zu zählen. Mit Left/Right/Mid geht es auch nur so halbwegs und für jede Einzelne Datei müsste ich es Extra neu definieren.

2. Wie kann man aus einem Netzwerkordner rauslesen, welche Datei die höchste Nummer hat?
Also ich hab jetzt geschafft alle Dateien in dem Verzeichnis aufzulisten, nur werden da alle angezeigt.
Vielleicht hat ja jemand eine bessere Idee.
 
Zuletzt bearbeitet:
Moin,

zur Frage 1: Die Funktion LEN() hilft dir weiter.
zur Frage 1: In eine Tabelle schreiben und sortieren lassen. Der letzte Eintrag ist dann die höchste Zahl.
 
So habs fast hinbekommen und es läuft schon fast perfekt.
Hätte da noch 2 Probleme

1. Wie definiert man den Pfad für Speichern unter?
Nutze dafür die Funktion Application.GetSaveAsFilename(....) nur möchte ich jetzt einen Pfad auf das Netzlaufwerk hinweisen.

2. Wenn eine Datei 800 - X heißt und eine zweite Datei 2300 - Y heißt, dann ist für VBA offentsichtlich, dass 800 nach 2300 kommt.

Code:
For Each datei In Verzeichnis.Files
    value = datei.Path
    Next datei

Kann man das irgendwie überprüfen oder umgehen?
 
Zuletzt bearbeitet:
OK,

zu 2.: Du liest einzeln die Dateinamen ein. Gut. 1. Datei = "44 - Hugo Hurtig". Mit
Code:
Sub HoechsteZahl()
   Dim Position As Integer
   Dim DateiName As String
   Dim Zahl As Long
   Dim MaxZahl As Long
   
   MaxZahl = 1
   DateiName = "044 - Hugo Hurtig"  'Natürlich auskommentieren, hier nur wegen Demo
   Position = InStr(DateiName, " - ")
   Zahl = Left(DateiName, Position - 1)
   If Zahl > MaxZahl Then MaxZahl = Zahl
   MsgBox MaxZahl
End Sub
 
Zurück
Oben