Dateinamen im Ordner in der UserForm anzeigen lassen
#1
Guten Tag,

ich erstelle per UserForm Formblätter. Dazu vergebe ich eine Laufendenummer (01-03-23). Anschließend speichere ich per CommandButton das Formblatt als PFD im vorgebenene Pfad. Der Dateiname wird anhand der Laufendennummer übernommen. Sodass ich nur noch den Ordner (03=März) wählen muss. Im Formblatt bleibt die zuletzt benutzte Laufendenummer gespeichert (Arbeitsmappe wird autotmatisch gespeichert, wenn ich sie schließe). Theoretisch kann ich dann einfach +1 bei der Laufendenummer zurechnen. Sobald ich allerdings einmal für den Monat April eine schreibe und danach wieder eine für März schreiben muss, muss ich immer erst wieder zum Ordner wo die Formblätter abgespeichert sind schauen, um zu prüfen, welche Laufendenummer die letzte im März war. Besteht die Möglichkeit im UserForm aus jedem Ordner (Januar-Dezember) die zuletzt gespeicherte Nummer einzusehen? Sprich

01-01-23
24-02-23
15-03-23
..
Antworten Top
#2
(06.03.2023, 14:57)Fynator schrieb: Im Formblatt bleibt die zuletzt benutzte Laufendenummer gespeichert
Dann wäre die naheliegende Lösung, eine Liste aller verwendeten laufenden Nummern (vielleicht auf einem separaten Blatt?) zu führen oder mindestens die für jeden Monat letzte verwendete laufende Nummer. 

Das Risiko, dass eine Datei verloren geht, verschoben oder gelöscht wird, wäre mir zu groß - denn damit ist auch die Eindeutigkeit der Nummern nicht mehr gegeben.
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • Fynator
Antworten Top
#3
Hallo,

Du könntest Di einfach den Ordner auslesen und aus dem größten Dateinmaen Deine Nummer extrahieren.

z.B. so:

Code:
Sub Hoechste_Nummer()
         
    pfad = Environ("USERPROFILE") & "\DESKTOP"
    Datei = get_max_name(pfad)
    MsgBox (Datei)
 
End Sub
Function get_max_name(pfad1)
    Dim fs As Object
    Dim pfad As Object
    Dim dfile As Object
    Dim ordner As Object
       
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set pfad = fs.getfolder(pfad1)
   
    get_max_name = ""
   
    For Each dfile In pfad.Files
        If get_max_name < dfile.Name Then get_max_name = dfile.Name
    Next dfile

    Set fs = Nothing
    Set pfad = Nothing
    Set dfile = Nothing
    Set ordner = Nothing

End Function
Antworten Top
#4
(06.03.2023, 15:31)daNorbert schrieb: Hallo,

Du könntest Di einfach den Ordner auslesen und aus dem größten Dateinmaen Deine Nummer extrahieren.

z.B. so:

Code:
Sub Hoechste_Nummer()
        
    pfad = Environ("USERPROFILE") & "\DESKTOP"
    Datei = get_max_name(pfad)
    MsgBox (Datei)
 
End Sub
Function get_max_name(pfad1)
    Dim fs As Object
    Dim pfad As Object
    Dim dfile As Object
    Dim ordner As Object
       
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set pfad = fs.getfolder(pfad1)
   
    get_max_name = ""
   
    For Each dfile In pfad.Files
        If get_max_name < dfile.Name Then get_max_name = dfile.Name
    Next dfile

    Set fs = Nothing
    Set pfad = Nothing
    Set dfile = Nothing
    Set ordner = Nothing

End Function

erstmal Danke für die schnelle Antwort.

Ich hab versucht es über Listenfeld anzeigen zu lassen, bleibt allerdings leer. Welches Steuerelement eignet sich am besten dafür?
Antworten Top
#5
Code:
Private Sub UserForm_Initialize()
'Liste alle PDF-Dateien im Ordner auf
    Dim myPath As String
    Dim myFile As String
    Dim i As Long
   
    myPath = "C.\..." 'Ordner Pfad
   
    'Überprüfe, ob der Ordner existiert
    If Dir(myPath, vbDirectory) = "" Then
        MsgBox "Der angegebene Ordner wurde nicht gefunden."
        Exit Sub
    End If
   
    'Durchsuche den Ordner nach PDF-Dateien
    myFile = Dir(myPath & "*.pdf", vbNormal)
    i = 1
   
    'Füllt die Listbox mit den gefundenen PDF-Dateien
    Do While myFile <> ""
        Me.ListBox1.AddItem myFile
        myFile = Dir()
        i = i + 1
    Loop
   
    'Wenn keine PDF-Dateien gefunden wurden
    If i = 1 Then
        MsgBox "Keine PDF-Dateien gefunden."
        Exit Sub
    End If
   
   
    Me.ListBox1.ListIndex = Me.ListBox1.ListCount - 1
   
End Sub
Hab jetzt ein anderen Code geschrieben. Er zeigt mir allerdings keine PDF Dateien an. Egal ob lokaler Pfad oder Netzwerk. Hat jemand eine Idee? verzweifle gerade 20
Antworten Top
#6
Guten Abend nochmal!

hab mich unentschieden und lasse mir nun die zuletzt gespeicherte PDF anzeigen je Ordner. Hab also 12 kleine ListBoxen erstellt, die mir pro Monat die zuletzt gespeicherte PDF anzeigen lassen. Da ich grundsätzlich nie eine PDF ändere , sollte es zu keine Überschreibungen kommen. Dazu abgesehen mir das System ja anzeigt, falls der Dateiname bereits belegt ist.
Code:
Private Sub UserForm_Initialize()

    Dim filePaths() As String
    Dim filePath As String
    Dim fileName As String
    Dim fileDate As Date
    Dim newestFile As String
    Dim latestDate As Date
    Dim i As Integer
   
    ' Array mit den Namen der 5 Ordner
    filePaths = Split("C:\Test\01 Januar,C:\Test\02 Februar,C:\Test\03 März,C:\Test\04 April,C:\Test\05 Mai,C:\Test\06 Juni,C:\Test\07 Juli,C:\Test\08 August,C:\Test\09 September,C:\Test\10 Oktober,C:\Test\11 November,C:\Test\12 Dezember", ",")
   
    ' Schleife durch alle Ordner
    For i = LBound(filePaths) To UBound(filePaths)
       
        ' Vollständiger Pfad zum Ordner mit den PDF-Dateien
        filePath = filePaths(i) & "\"
       
        ' Schleife durch alle Dateien im Ordner
        fileName = Dir(filePath & "*.pdf")
        Do While fileName <> ""
           
            ' Speichere Datum der aktuellen Datei
            fileDate = FileDateTime(filePath & fileName)
           
            ' Wenn das Datum der aktuellen Datei neuer ist als das letzte Datum der gefundenen Dateien
            ' speichere den Dateinamen als den neuesten
            If fileDate > latestDate Then
                newestFile = fileName
                latestDate = fileDate
            End If
           
            fileName = Dir ' Nächste Datei im Ordner
       
        Loop
       
        ' Füge den neuesten Dateinamen zur ListBox für den aktuellen Ordner hinzu
        If newestFile <> "" Then
            Me.Controls("ListBox" & i + 1).AddItem newestFile
        Else
            Me.Controls("ListBox" & i + 1).AddItem "Keine PDF-Dateien gefunden"
        End If
       
        ' Setze Variablen zurück für den nächsten Ordner
        newestFile = ""
        latestDate = 0
   
    Next i
   
End Sub

trotzdem ein herzliches Dank für die Hilfe.
Antworten Top
#7
Hi,

du kannst  die monatliche lfdNr jeweils in den CustomDocumentProperties ablegen und dir diese dann relativ unkompliziert "holen"
Du gibst lediglich den Monatsnamen ein. Sollte noch keine lfdNr vergeben worden sein ( also keine Property mit dem Monatsnamen angelegt worden sein ),
wird diese erstellt und die lfdNr1 zurückgegeben.
Anderenfalls wird die um 1 erhöhte lfdNr zurückgegeben.
Brauchst also lediglich in deiner Userform die Funktion aufzurufen, wenn du deine Datei speichern willst und bastelst dir die Rückgabe in deinen Dateinamen ein.

Teste mal

Code:
Sub start()
MsgBox lfdNr("März")
End Sub



Function lfdNr(strMonat As String) As String
Dim objCustProp As CustomProperty
Dim intCustPropItem As Integer
Dim intCustPropIndex
Dim anz As Integer

intCustPropItem = 0
For Each objCustProp In CustomProperties
intCustPropItem = intCustPropItem + 1
  If objCustProp.Name = strMonat Then
  intCustPropIndex = intCustPropItem
  Exit For
  End If
Next

If intCustPropIndex = 0 Then
  CustomProperties.Add Name:=strMonat, Value:="1"
  intCustPropIndex = 1
Else
  CustomProperties.Item(intCustPropIndex).Value = CustomProperties.Item(intCustPropIndex).Value + 1
End If
  lfdNr = strMonat & "_" & CustomProperties.Item(intCustPropIndex).Value

End Function


VG Juvee
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste