Dezember 07, 2021, 12:36:03

Neuigkeiten:

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


Dateiname mit fortlaufender Nummer

Begonnen von ReneB, Oktober 05, 2021, 12:47:15

⏪ vorheriges - nächstes ⏩

ReneB

Hallo,

ich benötige Eure Hilfe bei der Erstellung von Dateinamen. Ich möchte das wenn ein Dateiname bereits existiert eine fortlaufende Nummer dahinter geschrieben wird.
Bsp. Dateiname-1, Dateiname-2 usw.
Ich habe bereits etwas zusammengebastelt, allerdings steigt das System nach der -1 aus und erhöht nicht weiter.
Hier ein Auszug aus dem VBA code:

Nummer = 0

If Dir(filename, vbDirectory) <> "" Then

datei = Dir(filename, vbDirectory)
Do Until datei = ""
Nummer = Nummer + 1
datei = Dir()
Loop

filename = ".... & Nummer & " .pdf".
Wie gesagt funktioniert das Ganze nur bis zur 1 danach wird nicht weiter erhöht.

Könnt Ihr mir helfen?
Danke
Rene

PhilS

Zitat von: ReneB am Oktober 05, 2021, 12:47:15ich benötige Eure Hilfe bei der Erstellung von Dateinamen. Ich möchte das wenn ein Dateiname bereits existiert eine fortlaufende Nummer dahinter geschrieben wird.
Fällt das Problem mit der Fett-Markierung auf?
-> datei = Dir(filename, vbDirectory)
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

DF6GL

Hallo,

@ReneB:

ganz so einfach ist es nicht, wenn das Ganze richtig funktionieren soll.


Hier ein Beispiel:  (Nummernbereich 0-999),  Optionale Parameter anpassen.

(
Public Function NewFN(BasisName As String, Optional FNExt As String = ".PDF", Optional Path As String = "C:\Temp\")

    Dim FN() As String, _
        i As Long, _
        strFN As String, _
        strFN1 As String, _
        lngMaxNr As Long
   
       
    strFN1 = Dir(Path & BasisName & FNExt)
   
    If strFN1 > "" Then
            strFN = Dir(Path & BasisName & " - ???" & FNExt)
           
            If strFN > "" Then
           
               'Lese Dateinamen in Array
                i = 0
               
                Do Until strFN = ""
                    ReDim Preserve FN(i)
                    FN(i) = strFN
                    i = i + 1
                    strFN = Dir()
                Loop
               
                ' Extrahiere Nummern entspr. vorgegebenem Format
                For i = 0 To UBound(FN)
                    FN(i) = Replace(FN(i), BasisName & " - ", "")
                    FN(i) = Replace(FN(i), FNExt, "")
                 
                Next
               
                'Berechne höchste Nummer
                For i = 0 To UBound(FN)
                    If lngMaxNr < FN(i) Then lngMaxNr = FN(i)
                Next
               
               
            Else
               strFN = BasisName & " - 1" & FNExt
            End If
           

            strFN = BasisName & " - " & lngMaxNr + 1 & FNExt
    Else
        strFN = BasisName & FNExt
    End If
   
    NewFN = strFN

End Function

ReneB

Hallo DF6GL,

sieht ziemlich komplex aus. Ich dachte das wäre etwas einfacher bzw. kompakter zu lösen. Kann mir vieleicht trotzdem jemand sagen warum es bis zur -1 funktoniert, aber nicht weiter? D.h. ja so ganz verkehrt kann mein Ansatz nicht sein.

Hallo Phils,

leider fällt das Problem nicht auf. Kannst du noch den Schippe Input draufpacken?

Danke
Rene

PhilS

Zitat von: ReneB am Oktober 06, 2021, 12:15:39leider fällt das Problem nicht auf. Kannst du noch den Schippe Input draufpacken?
Du willst mit dem Aufruf von Dir() in der Schleife die Dateien in dem Verzeichnis zählen. Du übergibst aber vbDirectory als Attributes an die Funktion. Daher bekommst du nicht Dateien sondern nur (Unter-)Verzeichnisse von Dir geliefert.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

ReneB

Hallo,

super das war es. Habe vbdirectory rausgeschmissen und siehe da er zählt sauber hoch.

Danke sehr.

War mir ein Vergnügen.

Rene