Dateien Zählen in einem Ordner
#1
Hallo alle mit einender

Ich hab mal ein neues Problem was eigentlich ganz Einfach zu lösen sein
aber ich habe irgendwie keine idee wie ich das anstellen soll

Ich möchte in einem Ordner eine Datei finden (der Name  einer  Datei ist Blatt 1_T12 .xlsm oder Blatt 2 _T13 .xlsm usw.)
die Datei mit dem höchsten Blattnamen also in diesem fall Blatt 2_T13.xlsm

Hat jemand eine idee

vielen dank vorab

lg Ronny
Antworten Top
#2
Ich habe eine Idee. 

Du recherchierst ein bissel im Netz über Dateien in Ordnern suchen. Und wenn du schließlich das Grundgerüst fertig hast, dann schauen wir uns an wie man die Dateinamen auswerten könnte.
[-] Folgende(r) 2 Nutzer sagen Danke an ralf_b für diesen Beitrag:
  • GMG-CC, RonnyHerbert
Antworten Top
#3
Hallo ralf_b
Hab mal so ein blissl recherchiert im netz und bin mir nicht ganz schlüssig wie ichs angehen soll
 Da ich ja eigentlich nur die Datei mit der Größten laufenden Nr. suche hab ich mir´s einfach gemacht 
Man lese alle Dateien aus dem vorgesehen Ordner ein und danach lese man die Daten aus der letzten gespeicherten Datei aus zum beispiel die letzte Laufende Nr. usw.
Jetzt Kommts : Viel einfacher oder viel schöner ist der Code wenn ich dieses in einem Array machen würde ... Leute  ää nicht böse sein so weit bin ich noch nicht 
Hab auch schon einiges darüber gelesen 

Lg Ronny
Antworten Top
#4
Hallo, 19 

nachfolgend zwei Beispiele: 21 

Code:
Option Explicit
Public Sub Main_1()
    Dim strArray() As String
    Dim strFile As String
    Dim lngCount As Long
    ReDim Preserve strArray(9999)          ' Array kann 10.000 Dateinamen aufnehmen
    strFile = Dir$("C:\Temp\Blatt *.xlsm") ' Pfad anpassen!!!
    Do While strFile <> ""
        strArray(lngCount) = strFile
        lngCount = lngCount + 1
        strFile = Dir$()
    Loop
    ReDim Preserve strArray(lngCount - 1) ' Array wird zurechtgestutzt
    MsgBox strArray(UBound(strArray))
End Sub
Public Sub Main_2()
    Dim strOutput() As String
    ' Schreibt die Dateien mit Namen "Blatt..." aus C:\Temp\ ins Clipboard - Neueste am Ende
    'CreateObject("WScript.Shell").Run "CMD /C Dir C:\Temp\Blatt*.xlsm /B/OD | clip", 0, True
    ' Schreibt die Dateien mit Namen "Blatt..." aus C:\Temp\ ins Clipboard - Neueste am Anfang
    CreateObject("WScript.Shell").Run "CMD /C Dir C:\Temp\Blatt*.xlsm /B/O-D | clip", 0, True
    ' Array aus Clipboed bilden - Trennung ist Carriage Return (Cr) und Line Feed (Lf)
    strOutput = Split(CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text"), vbCrLf)
    ' Ausgabe aller Dateien im ersten Tabellenblatt
    'ThisWorkbook.Worksheets(1).Cells(1).Resize(UBound(strOutput) + 1) = Application.Transpose(strOutput)
    ' Ausgabe letzte Datei per Meldung
    'MsgBox strOutput(UBound(strOutput) - 1)
    ' Ausgabe erste Datei per Meldung
    MsgBox strOutput(LBound(strOutput))
End Sub

Die Anpassungen sind, auf Grund der ausreichenden Kommentare, kein Problem - hat mein kleiner Sohn gesagt. Dodgy
[-] Folgende(r) 2 Nutzer sagen Danke an Gast für diesen Beitrag:
  • RonnyHerbert, merkurus
Antworten Top
#5
Hallöchen,

ohne schleife und bei sehr großer Anzahl Dateien vielleicht auch etwas schneller könnte man es vielleicht auch so lösen:
Bei strCommand müsste man noch entsprechende Parameter zur Sortierung und zum Weglassen die Ausgabe der Anzahl Dateien anfügen
Code:
Sub DirLetzte()
    'Verweise -> Microsoft Scripting Runtime
    Dim fso As New FileSystemObject, readTxt As TextStream
    Dim strDir As String, arrDir
    Dim strCommand As String, strFileName As String
    'Ausgabedatei fuer Dir-Befehl
    strFileName = "C:\Temp\DirTest.Txt"
    'Shell-Cmd-String
    strCommand = "cmd.exe /c dir ""C:\Temp\*.*"" >""" & strFileName & """"
    'Shell-Cmd ausfuehren
    CreateObject("WScript.Shell").Run strCommand, 0, True
    'Ausgabedatei zuweisen und einlesen
    Set readTxt = fso.OpenTextFile(strFileName)
    strDir = readTxt.ReadAll
    'Daten splitten
    arrDir = Split(strDir, Chr(10))
    'letzten Dateieintrag auslesen und Ergebnis anzeigen
    arrDir = arrDir(UBound(arrDir) -1)
    MsgBox arrDir
    'Ausgabedatei schliessen und loeschen
    readTxt.Close
    Kill strFileName
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • RonnyHerbert
Antworten Top
#6
Guten Morgen Schaun 
Guten Morgen Case

Vielen dank für eure Beispiele Ich teste sie gleich mal aus
ich melde mich Nachher noch mal

Lg Ronny
Antworten Top
#7
Moin Case 

Dein erstes Codebeispiel war genau das was ich gesucht habe 
nun brauch ich nur noch die zahlen in die userform einlesen 
vielen Dank 
Lg Ronny
Antworten Top


Gehe zu:


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