Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1576to1580
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Alle Excel-Dateien in einem Verzeichnis öffnen

Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 17:26:48
Niclas
Hallo zusammen,
folgende Problemstellung:
Ich will mittels der INDIREKT-Funktion Daten aus anderen Excel-Dateien zusammentragen. Dies funktioniert ja bekanntermaßen nur, wenn diese Dateien auch geöffnet sind.
Daher versuche ich momentan ein Makro zu bauen, das alle Excel-Dateien in einem bestimmten Verzeichnis (sowie auch die Dateien in allen Unterordnern!) öffnet.
Die Dateien im Zielpfad zu öffnen funktioniert auch bereits, nur weiß ich leider nicht, wie ich die Unterordner mit einbeziehen kann.
Der Code sieht momentan so aus:
Sub GetData()
Dim pfad As String, Dateiname As String, iRow As Long
Application.ScreenUpdating = False
pfad = "C:\Users\xxx\Desktop\01_07\"
Dateiname = Dir(pfad & "*.xlsx")
Do While Dateiname  ""
Workbooks.Open Filename:=pfad & Dateiname
Dateiname = Dir()
Loop
End Sub

Über einen Tipp wäre ich sehr dankbar!
MfG

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 17:50:37
Sepp
Hallo Niclas,
du solltest zuerst mal beschreiben, welche Daten aus welchen Tabellenblättern du benötigst, vielleicht gibt es ja andere Wege als mit INDIREKT().
Gruß Sepp

AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 17:51:04
Piet
Hallo Niclas,
im Prinzip hast du die Lösung selbst angeboten, kommst nur nicht darauf! Dabei ist es sehr simpel...
Kopiere das Makro von Pfad bis Loop und füge es unter Loop neu ein! Dann gibst du im 2.Pfad den Unterordner mit an! usw. usw.
mfg Piet
AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 17:55:23
Niclas
Hallo,
vielen Dank für die Rückmeldungen.
Also konkret will ich aus verschiedenen Excel-Tabellen immer die gleichen Felder auslesen und diese dann in einer Übersicht zusammenführen. Ich habe in der Zieldatei auch schon alles vorformatiert, das einzige, was noch fehlt, ist das Öffnen der Quelldateien.
@Piet
Das ist mir schon klar, nur sind es sehr viele Unterordner und für jeden einzelnen Ordner eine Pfadänderung im Code abzubilden wäre viel zu aufwändig. Vorteil der Sache mit den Unterordnern ist ja, dass der Code dadurch universell einsetzbar wird.
MfG
AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 17:57:42
Sepp
Hallo Niclas,
"Also konkret will ich aus verschiedenen Excel-Tabellen immer die gleichen Felder auslesen und diese dann in einer Übersicht zusammenführen"
Konkret! Welche Zellen aus welchen Tabellen und wohin?
Eventuell wäre eine Beispieldatei hilfreich.
Gruß Sepp

Anzeige
AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 18:05:40
Niclas
Hallo,
eine Beispieldatei kann ich leider nicht liefern, da ich die Dateien momentan nicht bei mir habe.
Das System sieht so aus:
Aus der Zieldatei wird über die INDIREKT-Funktion nach Ordnern im System gesucht, einer für jeden Tag des Jahres (01_01, 01_02 usw.). Es kann sein, dass es diesen Ordner gibt, oder eben nicht. Wenn der Ordner nicht existiert und es einen Bezugsfehler gibt, ist in Excel hinterlegt, dass einfach nichts ausgegeben wird. Wenn der Bezug gefunden wird, dann liegt in diesem Ordner immer eine Exceldatei (mit nur einem Arbeitsblatt), aus der z.B. die Felder A15, D16, D17 und D18 ausgelesen und in die Zieldatei übertragen werden sollen.
In der Zieldatei habe ich die Links in die Ordnerstruktur dynamisch generiert und daraus die Funktion für die Abfrage zusammengebaut (im Zielpfad ändert sich ja jedes Mal das Datum). Über die Namensfunktion wird die (in Textform vorliegende) Funktion dann schließlich berechnet.
MfG
Anzeige
AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 18:10:58
Sepp
Hallo Niclas,
und wozu INDIREKT() und wozu die Dateien öffnen?
Wenn der Bezug als Text vorliegt, kann man ja einfach prüfen, ob die Datei existiert und wenn ja, dann kann man aus dem Text-Bezug per VBA eine Formel erstellen die auch bei geschlossener Datei funktioniert, oder die Werte auf andere Art aus der Datei ziehen.
Ohne genauere Infos kann ich nicht mehr sagen.
Gruß Sepp

AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 18:39:29
Niclas
Hallo,
wie würdest du denn prüfen, ob die Datei existiert? Da der Pfad dynamisch ist, müsste man entweder für jede Möglichkeit den VBA-Code anpassen (und somit duplizieren) oder eine VBA-Funktion basteln, die die Pfadänderung mit abbilden kann. Das übersteigt aber leider meine VBA-Kenntnisse..
Was für weitere Infos benötigst du denn, um festzustellen, inwiefern man das Ganze direkt komplett über VBA lösen könnte?
1. Schritt: Prüfen, ob Datei/Ordner vorhanden ist (dynamischer Pfad je nach Datum) z.B. C:\Users\xxx\Desktop\01_01\[xxx.xlsx]
2. Schritt: Wenn nein, nächstes Datum prüfen, wenn ja Excel-Datei in diesem Ordner öffnen, Felder A15, D16, D17 und D18 auslesen und in E1, F1, G1, H1 in der Zieldatei einfügen, nächstes Datum prüfen
3. Funktionsende bei letztem Datum des Jahres 12_31
MfG
Anzeige
AW: Alle Excel-Dateien in einem Verzeichnis öffnen
26.08.2017 19:28:44
Sepp
Hallo Niclas,
eine Möglichkeit.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub getData()
Dim strPath As String, strFile As String, strTab As String, strFormula As String
Dim varRanges As Variant
Dim lngDate As Long, lngEnd As Long, lngI As Long, lngR As Long

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .AskToUpdateLinks = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
End With

varRanges = Array("A15", "D16", "D17", "D18")

lngEnd = IIf(Month(DateSerial(Year(Date), 2, 29)) = 3, 365, 366)

strPath = "E:\Forum\" 'Stammverzeichnis

strTab = "Tabelle1" 'Tabellenname

With ThisWorkbook.Sheets("Tabelle2") 'Name der Ausgabetabelle
  For lngDate = 1 To lngEnd
    strFile = Dir(strPath & Format(DateSerial(Year(Date), 1, lngDate), "DD_MM") & "\*.xlsx", vbNormal)
    If strFile <> "" Then
      lngR = lngR + 1
      strFormula = "='" & strPath & "[" & strFile & "]" & strTab & "'!"
      For lngI = 0 To UBound(varRanges)
        .Cells(lngR, 5 + lngI).Formula = strFormula & varRanges(lngI)
      Next
    End If
  Next
  .Range("E1").Resize(lngR, 4) = .Range("E1").Resize(lngR, 4).Value
End With




ErrorHandler:

If Err.Number <> 0 Then
  MsgBox "Fehler in Modul2" & vbLf & vbLf & "Prozedur:" & vbTab & "getData" & vbLf & _
    "Nummer:" & vbTab & Err.Number & vbLf & "Meldung:" & vbTab & Err.Description & vbLf & _
    IIf(Erl, "Zeile:" & vbTab & Erl, ""), vbExclamation, "Fehler!"
  Err.Clear
End If

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .AskToUpdateLinks = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
End With

End Sub

Wahrscheinlich sollt der Dateiname oder Pfad auch noch irgendwo hin, aber du kannst dich ja nochmals melden.
Gruß Sepp

Anzeige
Fehler im Code!
26.08.2017 20:12:34
Sepp
Hallo Niclas,
da hatte sich ein fehler eingeschlichen.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub getData()
Dim strPath As String, strFile As String, strTab As String, strFormula As String
Dim varRanges As Variant
Dim lngDate As Long, lngEnd As Long, lngI As Long, lngR As Long

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .AskToUpdateLinks = False
  .DisplayAlerts = False
  .Calculation = xlCalculationManual
End With

varRanges = Array("A15", "D16", "D17", "D18")

lngEnd = IIf(Month(DateSerial(Year(Date), 2, 29)) = 3, 365, 366)

strPath = "E:\Forum\" 'Stammverzeichnis

strTab = "Tabelle1" 'Tabellenname

With ThisWorkbook.Sheets("Tabelle2") 'Name der Ausgabetabelle
  For lngDate = 1 To lngEnd
    strFile = Dir(strPath & Format(DateSerial(Year(Date), 1, lngDate), "DD_MM") & "\*.xlsx", vbNormal)
    If strFile <> "" Then
      lngR = lngR + 1
      strFormula = "='" & strPath & Format(DateSerial(Year(Date), 1, lngDate), "DD_MM") & "\[" & strFile & "]" & strTab & "'!"
      For lngI = 0 To UBound(varRanges)
        .Cells(lngR, 5 + lngI).Formula = strFormula & varRanges(lngI)
      Next
    End If
  Next
  .Range("E1").Resize(lngR, 4) = .Range("E1").Resize(lngR, 4).Value
End With

ErrorHandler:

If Err.Number <> 0 Then
  MsgBox "Fehler in Modul2" & vbLf & vbLf & "Prozedur:" & vbTab & "getData" & vbLf & _
    "Nummer:" & vbTab & Err.Number & vbLf & "Meldung:" & vbTab & Err.Description & vbLf & _
    IIf(Erl, "Zeile:" & vbTab & Erl, ""), vbExclamation, "Fehler!"
  Err.Clear
End If

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .AskToUpdateLinks = True
  .DisplayAlerts = True
  .Calculation = xlCalculationAutomatic
End With

End Sub

Gruß Sepp

Anzeige
AW: Fehler im Code!
26.08.2017 21:37:32
Niclas
Hallo,
vielen Dank für deine Mühe, diesen umfangreichen Code zu schreiben!
Es passt alles wunderbar, nur bei strFile und strFormula, die den Pfad generiert, habe ich "DD" und "MM" vertauscht, sodass erst Monat und dann Tag in den Pfad geschrieben wird.
Wirklich eine Top-Lösung, vielen Dank nochmals für deine Hilfe!!
MfG

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige