Clever-Excel-Forum

Normale Version: Mehrere Dateien aus Ordner in einer Datei zusammenführen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallöchen,

hast Du mal die ganzen Variablen, die Du da verwendest, geprüft? Kommen da auch passable Werte bei der Berechnung raus?
Warum hast du diese Zeile geändert?

Hier wird keine Datei aus dem Ordner geöffnet.

Code:
        Workbooks.Open Filename:="C:\Users\Name\Documents\All-in-one\Tabelle1"
     
Auch wenn es nur für Testzwecke wäre; fehlt dort das .xlsx


In meinem Code:
Code:
        Workbooks.Open Filename:=Pfad & Datei
LG UweD
Ich habe es wieder rückgängig gemacht, bekomme aber immer noch den Laufzeitfehler: 1004

Die Methode "Open" für das Objekt "Workbooks" ist fehlgeschlagen
Hallo auch von mir,

ich würde ohne VBA-Kenntnisse auf eine Umsetzung mit VBA verzichten und den einfachen Weg über PowerQuery (also Daten>Abrufen und Transformieren) gehen.

Dazu kannst du wie folgt vorgehen:
1. Daten>Abrufen und transformieren>Neue Abfrage>Aus Datei>Aus Ordner>OK
2. Wenn alle Dateien gleich aufgebaut sind: Kombinieren
--> Das erzeugt einige Abfragen, Parameter und Funktionen in Powerquery, aber das Ergebnis ist schnell erreicht.

Alternativ kannst du einen alternativen Schritt 2 wählen:
2. Bearbeiten klicken
3. ein ordentliches Filterkriterium für die Dateinamen wählen Dropdownpfeil in der Überschrift, Textfilter... ist gleich .xlsx (Case-Sensitiv!;zum Beispiel: [Extension] = ".xlsx")
4. Nur die Spalten Content und Name beibehalten (die spalten Markieren, rechte Maustaste -> Andere Spalten entfernen
5. Neue benutzerdefinierte Spalte hinzufügen, die den Dateiinhalt als Exceldatei interpretiert (Ribbon Spalte hinzufügen > Benutzerdefinierte Spalte > Benutzerdefinierte Spaltenformel :=Excel.Workbook([Content])
6. nur die Spalten Content und Benutzerdefiniert behalten (siehe 4.)
7. Den inhalt der Spalte Benutzerdefiniert expandieren (Auf den Doppelpfeil in der Überschrift klicken, Name und Data als Spalten auswählen, Ursprünglichen Spaltennamen als Präfix verwenden)
8. Den Inhalt der neuen Spalte Benutzerdefiniert.Data expandieren (jetzt kann die Option Ursprünglichen Spaltennamen als Präfix verwenden raus)
9. Die richtigen Datentypen für die Spalten festlegen (mindestens ein Numerischer Wert; z. B. mit rechter Maustaste: Summenzeilen und wiederholte überschriften werden dadurch zu Fehlerwerten)
10. Fehlerwerte ausfiltern (Rechtemaustaste auf numerische Spalte > Fehler entfernen)
--> Fertig (gegebenenfalls kannst du vor Schritt 9 noch die Überschriften einmal hochsetzen (Ribbon Start-> Erste Zeile als Überschriften verwenden)

Das ganze sieht dann so aus und lässt sich auf Knopfdruck aktualisieren:

Code:
let
    Quelle = Folder.Files("C:\Daten\PQ\Multiimport"),
    #"Gefilterte Zeilen" = Table.SelectRows(Quelle, each [Extension] = ".xlsx"),
    #"Andere entfernte Spalten" = Table.SelectColumns(#"Gefilterte Zeilen",{"Content", "Name"}),
    #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Andere entfernte Spalten", "Benutzerdefiniert", each Excel.Workbook([Content])),
    #"Andere entfernte Spalten1" = Table.SelectColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Name", "Benutzerdefiniert"}),
    #"Erweiterte Benutzerdefiniert" = Table.ExpandTableColumn(#"Andere entfernte Spalten1", "Benutzerdefiniert", {"Name", "Data"}, {"Benutzerdefiniert.Name", "Benutzerdefiniert.Data"}),
    #"Erweiterte Benutzerdefiniert.Data" = Table.ExpandTableColumn(#"Erweiterte Benutzerdefiniert", "Benutzerdefiniert.Data", {"Column1", "Column2"}, {"Benutzerdefiniert.Data.Column1", "Benutzerdefiniert.Data.Column2"}),
    #"Geänderter Typ" = Table.TransformColumnTypes(#"Erweiterte Benutzerdefiniert.Data",{{"Benutzerdefiniert.Name", type text}, {"Benutzerdefiniert.Data.Column1", type text}, {"Benutzerdefiniert.Data.Column2", type number}}),
    #"Entfernte Fehler" = Table.RemoveRowsWithErrors(#"Geänderter Typ", {"Benutzerdefiniert.Data.Column2"})
in
    #"Entfernte Fehler"


Viele Grüße
derHöpp
Ich setzte voraus, dass die Dateien sich im Folder 'C:\Users\Name\Documents\snb\' befinden
Bevor du diesem Makro laufen lässt:
- entweder ändere das Pfad im Makro
- oder kreiere das Pfad und speichere dort die Dateien
Code:
Sub M_snb()
  sn = Split(CreateObject("wscript.shell").exec("cmd /c dir C:\Users\Name\Documents\snb\*.xls /b").stdout.readall, vbCrLf)

  For j = 0 To UBound(sn) - 1
    With GetObject(sn(j))
      .Sheets(1).UsedRange.Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1)
      .Close 0
    End With
  Next
End Sub
Hi snb ...

ich habe das Makro jetzt so gelassen und die Dateien liegen in C:\Users\Name\Documents\snb\

Jetzt bekomme ich die Fehlermeldung: 

Automatisierungsfehler
Ungültige Syntax

und im Debugger wird das hier gelb markiert: With GetObject(sn(j))
Versuch's mal so:

Code:
Sub M_snb()
  sn = Split(CreateObject("wscript.shell").exec("cmd /c dir C:\Users\Name\Documents\snb\*.xls /s/b").stdout.readall, vbCrLf)

  For j = 0 To UBound(sn) - 1
    With GetObject(sn(j))
      .Sheets(1).UsedRange.Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1)
      .Close 0
    End With
  Next
End Sub
Seiten: 1 2