kruder77
Goto Top

Aus Excel heraus per Makro Dateiinformationen ermitteln und in Tabelle speichern

Hallo,

Wie kann man aus Exel heraus zum ersten einen Dateinamen und zum zweiten die Größe der entsprechenden Datei finden und an einer vorher bestimmten Stelle innerhalb der Exel-Datei speichern?

Vielen Dank fürs Antworten
Kruder


[Edit Biber 15.9.2007] Von "Entwicklung" nach "Excel" verschoben und auf "gelöst" gesetzt".[/Edit]

Content-Key: 68554

Url: https://administrator.de/contentid/68554

Printed on: April 18, 2024 at 23:04 o'clock

Member: ISpawn
ISpawn Sep 13, 2007 at 08:44:23 (UTC)
Goto Top
Hi,
wenn ich dich richtig verstanden habe meinst du das :

Sub Test()
Dim xlName As String
Dim xlSize As String
Dim oSheet As Worksheet
Dim i As Integer

On Error GoTo fail

xlName = Application.ActiveWorkbook.FullName
xlSize = FileSystem.FileLen(xlName)
Set oSheet = Application.ActiveWorkbook.Sheets.Add
For i = 1 To oSheet.Columns.Count
Cells(i, i).Value = xlName
Cells(i + 1, i).Value = xlSize '(bytes)
Next i
Exit Sub

fail:
Call MsgBox(Err.Description, vbInformation, "Fehler")

End Sub
Member: kruder77
kruder77 Sep 13, 2007 at 09:07:53 (UTC)
Goto Top
Hallo ISpawn,

erstmal, danke fürs schnelle Antworten!

Ich würde gerne z.B. aus C:\Documents\Test\ eine Reihe von zb. *.doc (können auch beliebige andere Dateien/Pfade sein) so verwerten, dass ich in der Exel-Tabelle dann das so stehen habe:


Dateiname1 Dateigröße
Dateiname2 Dateigröße
usw.

Ich muss dazu sagen, das ich von VBA überhaupt keine Ahnung habe. Es wäre echt super wenn Du evt. den Code ein ganz klein wenig dokumentieren könntest.

Vielen Vielen Dank
Kruder
Member: ISpawn
ISpawn Sep 13, 2007 at 09:45:10 (UTC)
Goto Top
Hi,


Kopiere den Code mal in deinen VBA Editor und starte die Sub FillMe.
vorrausgesetzt du hast einen C:\temp\ Ordner auf deiner Platte ansonsten musst du die Variable sucheIn bzw sucheNach anpassen .

Gruß
Micha (btw.... hab sogar ein paar comments geschrieben... bei Fragen, fragen)

Option Explicit
Dim fso As Object 'FileSystemObject  
'------------------------------------------  
Sub FillMe()
    On Error GoTo fail
      Set fso = CreateObject("Scripting.FilesystemObject") 'New FileSystemObject  
      
      Dim sFiles() As String  'Speicher für die Dateinamen  
      Dim sSize() As String   'Speicher für die Dateigrößen  
      
      'Init der Speicher auf 0  
      ReDim sFiles(0)
      ReDim sSize(0)
     
      Dim sucheIn As String
      Dim sucheNach As String
      
      sucheIn = "C:\temp\" 'Order in dem nach Dateien gesucht werden soll  

      sucheNach = "*.*"    'Dateityp nachdem gesucht werden soll  
      '(abc*.* wird nicht Funktionieren!)  
      '*.*, *.doc oder *.blabla  
      Call SucheHier(sucheIn, sucheNach, sFiles(), sSize(), True)
      
        
        
        If UBound(sFiles()) - 1 < 0 Then
            'Nix gefunden  
            Exit Sub
        Else
            'Damit Excel nicht flackert ....  
            Application.ScreenUpdating = False
            Dim owb As Workbook
            Dim oSheet As Worksheet
            Dim i As Integer
            
            'Neues Workbook anlegen (damit man nix überschreibt)  
            Set owb = Application.Workbooks.Add
            'ein neues sheet hinzufügen  
            Set oSheet = owb.Sheets.Add
               'Spalte 2 selektieren damit diese Spalte als Text definiert wird  
                Columns("B:B").Select  
                Selection.NumberFormat = "@"  
                'Selektion aufheben  
                Range("A1").Select  
            'Für alle gefundenen Dateien in die Zelle i des Sheets den Dateinamen eintragen.  
            For i = 0 To UBound(sFiles()) - 1
                oSheet.Cells(i + 1, 1) = sFiles(i)      'DateiName  
                oSheet.Cells(i + 1, 2).Value = sSize(i) 'KBytes  
            Next i
            Application.ScreenUpdating = True 'Aktualisierung wieder aktivieren  
        End If
        
fail:
Application.ScreenUpdating = True 'Aktualisierung wieder aktivieren  
End Sub
'-----------------------------  
Sub SucheHier(ByVal sFolder As String, ByVal sFiletype As String, ByRef oRetFiles() As String, ByRef oRetSize() As String, Optional ByVal SubFolder As Boolean = False)
'sFolder = sucheIn  
'sFileType = sucheNach  
'oRetFiles() = String Array für die gefundenen Dateien  
'oRetSize() = String Array für die Dateigrößen-information  
'SubFolder = Boolean Flag (default = False = keine Unterverzeichnisse durchsuchen)  
'-----------------------------  

On Error GoTo fail 'bei einem Fehler gehts bei fail: weiter  
Dim oFolder As Object 'Folder  
Dim oFile As Object 'File  

       'Für jeden file in dem Folder  
        For Each oFile In fso.GetFolder(sFolder).Files
            'nur wenn der dateiname = *.blabla oder *.* (alle) ist.  
            If LCase("*." & fso.GetExtensionName(oFile.ShortName)) = LCase(sFiletype) Or sFiletype = "*.*" Then  
               'Rückgabe Array vergrößern  
                ReDim Preserve oRetFiles(UBound(oRetFiles()) + 1)
                ReDim Preserve oRetSize(UBound(oRetSize()) + 1)
                     'Hinzufügen ins Array  
                      oRetFiles(UBound(oRetFiles()) - 1) = oFile.ShortPath
                      oRetSize(UBound(oRetSize()) - 1) = oFile.Size / 1024
            End If
        Next
        
       'Falls der aktuelle Ordner weitere Ordner beinhaltet ( ....subFolders.Count > 0)  
       'und der Parameter SubFolder = True übergeben worden ist ab in einer Rekursion bis kein Ordner mehr vorhanden ist  
        If SubFolder = True And fso.GetFolder(sFolder).SubFolders.Count > 0 Then
           For Each oFolder In fso.GetFolder(sFolder).SubFolders
              'Rekursion  
               Call SucheHier(oFolder.Path, sFiletype, oRetFiles, oRetSize, SubFolder)
           Next oFolder
        End If

fail:
'Falls mal was daneben geht  
End Sub
Member: kruder77
kruder77 Sep 15, 2007 at 05:31:23 (UTC)
Goto Top
Hi Micha,

vielen Dank für deine Hilfe!!! Klappt wunderbar - bin leider ebengerade erst zum ausprobieren gekommen. Kannst Du mir vielleicht ein Buch empfehlen welches mir bei VBA die Grundlagen relativ gut vermittelt? Ich nehme mal an, dass Du eines durchgearbeitet hast...

Danke & ein schönes We

Kruder
Member: ISpawn
ISpawn Sep 18, 2007 at 05:34:04 (UTC)
Goto Top
Hi,

reine VBA Bücher bringen meineserachtens nicht soviel, wenn schon solltest du eher nach den VB6 Büchern suchen und dir damit kleine SpielProggies machen.

Wenn du das geschafft hast und dich mit den Methoden / Properties auskennst, brauchst du 'meistens' nur noch den Richtigen Verweis setzen und im Objekt-Katalog (F2 im VBA Editor) dir anschauen wozu zb ein Excel.Application Objekt alles in der Lage ist.....

Gruß
Micha