Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mehrere Dateien einlesen

mehrere Dateien einlesen
13.03.2008 17:34:00
Leonhard
Hallo alle miteinander,
Ich möchte verschiedene Dateien mit der gleichen Endung und vom selben Ordner in VBA einlesen und werte daraus kopieren.
Das kopieren ist kein Problem.
Aber ich brauche am besten eine schleife die nacheinander alle Dateinamen in eine Variable einliest die die spezielle Endung besitzen.
Weiterhin wäre es günstig wenn ich den Pfad der Dateien in eine andere Variable speichern könnte (mit Application.GetOpenFilename() bekomme ich ja Pfad und Dateiname)
mfg Leo

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrere Dateien einlesen
13.03.2008 17:52:00
Tino
Hallo,
bei VBA gut müsstest du hiermit etwas anfangen können.
Geht nicht bei Office 2007!

Sub dateiauflisten()
Dim i As Long
With Application.FileSearch
.NewSearch
.LookIn = "D:\Bilder\Amerika" 'Suchverzeichnis
.SearchSubFolders = False 'True = mit Unterverzeichnis
.Filename = "*.jpg" 'Datei Typ
.Execute
For i = 1 To .FoundFiles.Count
Debug.Print .FoundFiles(i)  'kompletter Pfad
Debug.Print Right(.FoundFiles(i), Len(.FoundFiles(i)) - InStrRev(.FoundFiles(i), "\")) 'nur  _
Name der Datei
Next i
End With
End Sub


Gruß
Tino

Anzeige
AW: mehrere Dateien einlesen
13.03.2008 18:01:28
Josef
Hallo Leo,
eine Möglichkeit.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit
'by J.Ehrensberger
Private Function FileSearchFSO(ByRef Files As Variant, ByVal InitialPath As String, Optional ByVal FileName As String = "*", _
    Optional ByVal SubFolders As Boolean = False) As Long


Dim mobjFSO As Object, mfsoFolder As Object, mfsoSubFolder As Object, mfsoFile As Object

Set mobjFSO = CreateObject("Scripting.FileSystemObject")

Set mfsoFolder = mobjFSO.GetFolder(InitialPath)

On Error Resume Next

For Each mfsoFile In mfsoFolder.Files
    If Not mfsoFile Is Nothing Then
        If LCase(mobjFSO.GetFileName(mfsoFile)) Like LCase(FileName) Then
            If IsArray(Files) Then
                Redim Preserve Files(UBound(Files) + 1)
            Else
                Redim Files(0)
            End If
            Files(UBound(Files)) = mfsoFile
        End If
    End If
Next

If SubFolders Then
    For Each mfsoSubFolder In mfsoFolder.SubFolders
        FileSearchFSO Files, mfsoSubFolder, FileName, SubFolders
    Next
End If

If IsArray(Files) Then FileSearchFSO = UBound(Files) + 1
On Error GoTo 0
Set mobjFSO = Nothing
Set mfsoFolder = Nothing
End Function

Private Function fncBrowseForFolder(Optional ByVal defaultPath = "") As String
Dim objFlderItem As Object, objShell As Object, objFlder As Object

Set objShell = CreateObject("Shell.Application")
Set objFlder = objShell.BrowseForFolder(0&, "Ordner auswählen...", 0&, defaultPath)

If objFlder Is Nothing Then GoTo ErrExit

Set objFlderItem = objFlder.Self
fncBrowseForFolder = objFlderItem.Path

ErrExit:

Set objShell = Nothing
Set objFlder = Nothing
Set objFlderItem = Nothing
End Function

Sub test()
Dim a
Dim result As Long, l As Long, strFolder As String, strExt As String

strFolder = fncBrowseForFolder

If strFolder = "" Then Exit Sub

strExt = "xls" 'gesuchte Dateiendung

result = FileSearchFSO(a, strFolder & "\", "*." & strExt, True)

If result <> 0 Then
    For l = 0 To UBound(a)
        'hier der Code zum Öffnen/Auslesen der Dateien
    Next
End If

End Sub


Gruß Sepp



Anzeige
AW: mehrere Dateien einlesen
14.03.2008 08:18:55
Leonhard
Vielen Dank an euch beide!!
Das hat mir sehr weitergeholfen!!
mfg Leo
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Mehrere Dateien in Excel einlesen und auslesen


Schritt-für-Schritt-Anleitung

Um Daten aus mehreren Excel-Dateien auszulesen, kannst Du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne die Excel-Anwendung und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub mehrereDateienEinlesen()
        Dim myPath As String
        Dim myFile As String
        Dim wb As Workbook
    
        ' Definiere das Suchverzeichnis
        myPath = "D:\Dein\Suchverzeichnis\"
        myFile = Dir(myPath & "*.xls*") ' Suche nach Excel-Dateien
    
        ' Schleife durch alle Dateien
        Do While myFile <> ""
            Set wb = Workbooks.Open(myPath & myFile)
            ' Hier kannst Du Deine Logik zum Auslesen der Daten einfügen
    
            wb.Close SaveChanges:=False
            myFile = Dir ' Nächste Datei
        Loop
    End Sub
  4. Passe den Pfad (myPath) an Dein Suchverzeichnis an.

  5. Führe das Makro aus: Drücke F5 oder klicke auf „Ausführen“.


Häufige Fehler und Lösungen

  • Fehler: "Die Datei kann nicht gefunden werden"

    • Lösung: Stelle sicher, dass der Pfad korrekt angegeben ist und die Dateiendungen stimmen.
  • Fehler: "Kompatibilitätsprobleme"

    • Lösung: Der oben stehende Code funktioniert möglicherweise nicht in Office 2007. Nutze stattdessen die Application.GetOpenFilename Methode, um die Dateien auszuwählen.

Alternative Methoden

Du kannst die Methode Application.GetOpenFilename verwenden, um das Standardverzeichnis auszuwählen und mehrere Dateien auszuwählen. Hier ist ein Beispiel:

Sub DateienAuswaehlen()
    Dim fileNames As Variant
    fileNames = Application.GetOpenFilename("Excel-Dateien (*.xls; *.xlsx), *.xls; *.xlsx", MultiSelect:=True)

    If Not IsArray(fileNames) Then Exit Sub ' Keine Auswahl getroffen

    Dim wb As Workbook
    For Each file In fileNames
        Set wb = Workbooks.Open(file)
        ' Hier kannst Du Deine Logik zum Auslesen der Daten einfügen
        wb.Close SaveChanges:=False
    Next file
End Sub

Praktische Beispiele

  1. Daten aus mehreren Excel-Dateien zusammenführen: Erstelle eine Liste, die alle Daten in einer neuen Datei zusammenführt.

  2. Bestimmte Daten auslesen: Lese nur bestimmte Zellen oder Bereiche aus jeder Datei aus, zum Beispiel:

    Dim ws As Worksheet
    Set ws = wb.Sheets(1) ' Zugriff auf das erste Arbeitsblatt
    ' Beispiel: Werte in Zelle A1 auslesen
    Debug.Print ws.Range("A1").Value

Tipps für Profis

  • Verwende Application.FileDialog: Damit kannst Du Benutzer eine Datei oder mehrere Dateien auswählen lassen, was die Benutzerfreundlichkeit erhöht.
  • Optimierung: Schalte Bildschirmaktualisierung und Berechnung während der Schleife aus, um die Performance zu verbessern:

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich nur bestimmte Dateiformate einlesen?
Du kannst die Dateiendung im Dir-Befehl anpassen, z.B. myFile = Dir(myPath & "*.xlsx").

2. Funktioniert das auch in älteren Excel-Versionen?
Die oben genannten Beispiele funktionieren in den meisten modernen Excel-Versionen. Für Excel 2007 musst Du eventuell Anpassungen in der Syntax vornehmen, insbesondere bei der Verwendung von Application.GetOpenFilename.

3. Wo finde ich meine Suchverzeichnisse?
Du kannst das gewünschte Suchverzeichnis manuell im Code angeben oder die Application.GetOpenFilename-Methode verwenden, um interaktiv einen Ordner auszuwählen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige