Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: ReneB am Oktober 05, 2021, 12:47:15

Titel: Dateiname mit fortlaufender Nummer
Beitrag von: ReneB am Oktober 05, 2021, 12:47:15
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
Titel: Re: Dateiname mit fortlaufender Nummer
Beitrag von: PhilS am Oktober 05, 2021, 14:29:27
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)
Titel: Re: Dateiname mit fortlaufender Nummer
Beitrag von: DF6GL am Oktober 05, 2021, 15:06:23
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
Titel: Re: Dateiname mit fortlaufender Nummer
Beitrag von: ReneB am Oktober 06, 2021, 12:15:39
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
Titel: Re: Dateiname mit fortlaufender Nummer
Beitrag von: PhilS am Oktober 06, 2021, 12:29:50
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.
Titel: Re: Dateiname mit fortlaufender Nummer
Beitrag von: ReneB am Oktober 06, 2021, 13:28:31
Hallo,

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

Danke sehr.

War mir ein Vergnügen.

Rene