| home |  
  

   © 2005 by Friedel Schmidt •  E-Mail  •                      Top  

   | impressum | feedback | home |  


Inhaltsverzeichnis

Suchen

Links
  

Dateien aus Verzeichnis einlesen
Versionen: Excel 97

Per Makro sollen Dateien nach einem Dateifilter aus einem bestimmten Verzeichnis eingelesen werden.

Die Dateiliste beginnt im Bereich A4:B4
In "B1" steht das Verzeichnis (z.B. "C:\Daten"),
in "B2" der Dateifilter (z.B. "*.xls")
(wird der Dateifilter auf *.* gesetzt, werden alle Dateien aus dem Verzeichnis eingelesen!)
Steht eine korrekte Verzeichnisangabe in "B1", werden die Daten kommentarlos unter Berücksichtigung des Filters in "B2" eingelesen
Ist "B1" leer oder existiert das angegebene Verzeichnis nicht (Schreibfehler u.Ä.) wird ein Dateibrowser geöffnet und mittels diesem kann ein Verzeichnis ausgewählt werden.

VBA-Entwicklungsumgebung öffnen und zwei Module einfügen

In das erste Modul folgenden Code eintragen:

Option Explicit

Sub DateienEinlesen()
Dim arrOrdner As Variant
Dim iOrdner As Integer, x As Integer
Dim sVerzeichnis As String, sDatei As String, sFilter As String
Dim rStartzelle As Range, rEinfuegezelle As Range
  sVerzeichnis = Range("B1").Value
   If sVerzeichnis = "" Then Goto Abfrage
    If Right(sVerzeichnis, 1) = "\" Then
     sVerzeichnis = Left(sVerzeichnis, Len(sVerzeichnis) - 1)
    End If
   arrOrdner = fncFolders(sVerzeichnis)
  For iOrdner = UBound(arrOrdner) To 1 Step -1
 If fncIfFolderExists(CStr(arrOrdner(iOrdner))) Then
  Else
   Goto Abfrage
 End If
   Next iOrdner
    sVerzeichnis = sVerzeichnis
     If Right(sVerzeichnis, 1) <> "\" Then
      sVerzeichnis = sVerzeichnis & "\"
     End If
    Goto Weiter
Abfrage:
Dim sMsg As String
sMsg = "Wählen Sie bitte einen Ordner aus:"
sVerzeichnis = getdirectory(sMsg)
   If sVerzeichnis <> "" Then
    If Right(sVerzeichnis, 1) <> "\" Then
     sVerzeichnis = sVerzeichnis & "\"
    End If
   End If
Weiter:
sFilter = Range("b2")
Set rStartzelle = Range("b4")
sDatei = Dir(sVerzeichnis & sFilter)
While sDatei <> ""
Set rEinfuegezelle = rStartzelle.Offset(x)
rEinfuegezelle.Value = sDatei
rEinfuegezelle.Offset(0, -1) = x + 1
x = x + 1
sDatei = Dir
Wend
End Sub

Private Function fncFolders(sFolder As StringAs Variant
   Dim arr() As String
   Dim iCounter As Integer, iFolder As Integer
   ReDim arr(1 To 1)
   arr(1) = sFolder
   iFolder = 1
   For iCounter = Len(sFolder) To 4 Step -1
 If Mid(sFolder, iCounter, 1) = "\" Or iCounter = 1 Then
    iFolder = iFolder + 1
    ReDim Preserve arr(1 To iFolder)
    arr(iFolder) = Left(sFolder, iCounter - 1)
 End If
   Next iCounter
   fncFolders = arr
End Function

Private Function fncIfFolderExists(sFolder As StringAs Boolean
   Dim sOld As String
   sOld = CurDir
   On Error Resume Next
   ChDrive Left(sFolder, 1)
   ChDir sFolder
   If Err = 0 Then fncIfFolderExists = True
   On Error Goto 0
   ChDrive Left(sOld, 1)
   ChDir sOld
End Function


In das zweite Modul diesen Code eintragen:

Option Explicit

Option Private Module

Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Declare Function SHGetPathFromIDList Lib "shell32.dll" _
    Alias "SHGetPathFromIDListA" (ByVal pidl As LongByVal pszPath As StringAs Long

Declare Function SHBrowseForFolder Lib "shell32.dll" _
  Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Function getdirectory(Optional msg) As String
    Dim bInfo As BROWSEINFO
    Dim Path As String
    Dim r As Long, x As Long, pos As Integer
    bInfo.pidlRoot = 0&
    If IsMissing(msg) Then
   bInfo.lpszTitle = "Wählen Sie bitte einen Ordner aus."
    Else
   bInfo.lpszTitle = msg
    End If
    bInfo.ulFlags = &H1
    x = SHBrowseForFolder(bInfo)
    Path = Space$(512)
    r = SHGetPathFromIDList(ByVal x, ByVal Path)
    If r Then
   pos = InStr(Path, Chr$(0))
   getdirectory = Left(Path, pos - 1)
    Else
   getdirectory = ""
    End If
End Function


Makro "DateienEinlesen" starten - viel Spaß


Dateien aus Verzeichnis und Unterverzeichnis auslesen