Registriert seit: 18.01.2023
Version(en): 2019
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
..
26865
Nicht registrierter Gast
(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:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• Fynator
Registriert seit: 21.09.2022
Version(en): Mehrere
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
Registriert seit: 18.01.2023
Version(en): 2019
(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?
Registriert seit: 18.01.2023
Version(en): 2019
06.03.2023, 17:10
(Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2023, 17:11 von Fynator.)
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
Registriert seit: 18.01.2023
Version(en): 2019
06.03.2023, 20:47
(Dieser Beitrag wurde zuletzt bearbeitet: 06.03.2023, 20:47 von Fynator.)
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.
Registriert seit: 21.08.2022
Version(en): 2016
07.03.2023, 01:48
(Dieser Beitrag wurde zuletzt bearbeitet: 07.03.2023, 01:48 von juvee.)
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