Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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

Aus mehreren Workbooks Daten importieren

Aus mehreren Workbooks Daten importieren
31.08.2016 16:52:07
Simon
Hallo zusammen,
da ich noch absoluter VBA-Frischling bin, suche ich hier Hilfe und hoffe ihr könnt mir helfen :) Ich habe es leider bisher nicht hinbekommen, entsprechende Makros im Internet auf meine Bedürfnisse umzuändern.
Situation:
Ich habe einen Ordner ("Leistungsnachweis") in dem ich mehrere Workbooks (.xlsx) habe (aktuell aber nur eines =August 2016) mit gleich aufgebauter Namensstruktur (z.B. Leistungsnachweis_1, Leistungsnachweis_2,...) mit 1-12 für die Monate.
Da ich bei der Benennung aber flexibel bin wäre folgende Benennung meinerseits wünschenswert: Leistungsnachweis_Januar_2016, Leistungsnachweis_November_2015,...
um auch die Jahreszahl mit zu integrieren.
Diese Workbooks haben alle nur ein einziges Worksheet, das von der Datenstruktur immer identisch ist und sich lediglich in der Anzahl der Zeilen unterscheidet.
Die Daten der Sheets sollen alle in eine Datei ("Daten gesamt") im selben Ordner kopiert werden.
Dabei soll von den Sheets jeweils der Bereich "A7:I(letzte benutzte Zeile)" kopiert werden.
In der Zieldatei sollen die Daten dann in den Bereich "A(letzte benutzte Zeile + 1)" (bzw. die ersten importierten Daten ab A3) kopiert werden.
Sahnehäubchen für mich:
Da jeden Monat ja eine weitere Datei hinzu kommt, muss jeden Monat ein neuer Import von (neuen) Daten durchgeführt werden.
1) Ist es möglich dies zu automatisieren (z.B. beim Öffnen der Datei)? Z.B. dass es ausreicht die neue Datei einfach in den Ordner zu verschieben!?
2) Eine automatische Erkennung, welche Dateien(!) (ich sage bewusst nicht Daten, da ich nicht ausschließen möchte, dass es irgendwann zu identischen Werten kommen kann) bereits importiert wurden, sodass diese nicht erneut importiert werden!?
Hier mal meine Anfänger-Krücke von Code (der aber leider nicht funktioniert):
Option Explicit

Sub Daten_importieren()
'Ausschalten
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayStatusBar = False
Application.EnableEvents = False
Application.DisplayAlerts = False
'Variablen definieren
Dim WZ As Long
Dim Pfad As String
Dim Dateiname As String
Dim Zmax1 As Long
Dim Zmax2 As Long
Dim Source As Workbook
Dim Zmax3 As Long
'Pfad festlegen
Pfad = "H:\Sonstige Daten\Leistungsnachweis"
'Daten importieren
For WZ = 8 To 8
Zmax1 = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
Dateiname = "Leistungsnachweis_" & WZ & ".xlsx"
Set Source = Workbooks.Open(Pfad & "\" & Dateiname)
Zmax2 = Source.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Range("A7:I" & Zmax2).Copy
ThisWorkbook.ActiveSheet.Activate
Range("A" & Zmax1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Source.Close SaveChanges:=False
Next WZ
'Für Zeile J Kosten pro Posten berechnen
Zmax3 = ThisWorkbook.ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Range("J3").Select
ActiveCell.FormulaR1C1 = "=RC[-3]*RC[-2]"
Range("J3").Select
Selection.Copy
Range("J3:J" & Zmax3).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'Einschalten
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayStatusBar = True
Application.EnableEvents = True
Application.DisplayAlerts = True
Summenberechnung_Stunden_Kosten
End Sub


Vielen Dank vorab! :)
Grüße Simon

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus mehreren Workbooks Daten importieren
01.09.2016 05:49:43
fcs
Hallo Simon,
verwende als Dateinamen folgende Syntax;
Leistungsnachweis_JJJJ-MM.xls
also für August 2016: Leistungsnachweis_2016-08.xls
Dann kann man für den Import den Startmonat in der Form JJJJ-MM in einer Input-Box vorgeben und alle Dateien im Verzeichnis die neuer oder gleich sind in einer Schleife importieren.
Eine vollständige Automatisierung wäre möglich, wenn beim Import auch der Dateiname in eine Spalte eingetragen wird.
Dann müsste das Makro prüfen, ob der Name der Datei aus dem Verzeichnis schon in der Gesamtliste in der Spalte vorhanden ist.
Gruß
Franz
Sub Daten_importieren()
'Ausschalten
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.DisplayStatusBar = False
.EnableEvents = False
.DisplayAlerts = False
End With
'Variablen definieren
Dim Pfad As String
Dim Dateiname As String
Dim Zmax1 As Long
Dim Zmax2 As Long
Dim wkbSource As Workbook
Dim Zmax3 As Long
Dim wksZiel As Worksheet
Dim wksSource As Worksheet
Dim strJJJJ_MM As String
Dim strJJJJ_MM_Datei As String
'Pfad festlegen
Pfad = "H:\Sonstige Daten\Leistungsnachweis"
'Startzeitraum angeben
strJJJJ_MM = InputBox( _
"Ab welchem Zeitraum soll der Leistunsnachweis eingelesen werden (JJJJ-MM)?", _
"Einlesen Leistungsnachweise", _
Format(DateSerial(Year(Date), Month(Date) - 1, 1), "YYYY-MM"))
If strJJJJ_MM = "" Then Exit Sub
Set wksZiel = ThisWorkbook.Worksheets(1)
'Daten importieren
Dateiname = Dir(Pfad & "\" & "Leistungsnachweis_*.xlsx")
Do Until Dateiname = ""
strJJJJ_MM_Datei = Mid(Dateiname, Len("Leistungsnachweis_") + 1, 7)
If strJJJJ_MM_Datei >= strJJJJ_MM Then
Zmax1 = wksZiel.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
If Zmax1 

Anzeige
AW: Aus mehreren Workbooks Daten importieren
01.09.2016 09:17:39
Simon
Hallo Franz,
erstmal vielen Dank für die schnelle Antwort!!!
Der Datenimport funktioniert super.
Leider gibt es momentan aber einen kleinen Haken. Ich hab die Überschriften A2 - J2 als Tabelle formatiert, sodass alle Daten die zukünftig importiert werden, dann automatisch in die Tabelle (ab Zeile 3) übernommen werden.
Wenn ich den Datenimport jetzt aber mit dieser Tabellenformatierung durchführe, dann verlängert er die Tabelle (mit Leerzeilen) um die Anzahl der importierten Zeilen und setzt die eigentlichen Dateien unformatiert unter die Tabelle.
Komischerweise hat der Vorgang beim ersten Import noch hervorragend geklappt, beim zweiten Versuch kam dann dieser "Fehler" zustande.
Wenn ich die Tabellenformatierung der zweiten Zeile aufhebe, kopiert er die Daten korrekt ab Zeile 3 rein. Da ich allerdings am Ende eine Pivot-Tabelle erstellen möchte, benötige ich die Daten in Tabellenformatierung.
1)Hast du eine Ahnung woran das liegen könnte? Bzw. gibt es vllt einen galanteren(automatisierten) Weg als meinen mit der Tabellenformatierung?
2)Bezüglich der Import-Prüfung: Wie müsste denn der Code dazu aussehen? Angenommen er könnte die Dateinamen der importierten Dateien im Bereich L2:L(Zmax) ablegen?
2.1) Können die Dateinamen auch in einem Dropdown-Feld (also innerhalb eines Feldes (Hier z.B. L2) abgelegt werden?
Noch einmal vorab vielen Dank und sorry für die vielen Fragen :D
Gruß Simon
Anzeige
AW: Aus mehreren Workbooks Daten importieren
01.09.2016 10:15:19
Simon
P.S.: Punkt 2.1) ist reiner Wunsch, daher nicht zwingend notwendig :)
AW: Aus mehreren Workbooks Daten importieren
02.09.2016 05:23:28
fcs
Hallo Simon,
1)Hast du eine Ahnung woran das liegen könnte? Bzw. gibt es vllt einen galanteren(automatisierten) Weg als meinen mit der Tabellenformatierung?
Bei Blättern mit Tabellen liefert die Suche nach der letzten Zeile mit Daten mit den gängigen VBA-Methoden oft andere Ergebnisse als in Blättern ohne Tabellen.
Deshalb muss man sich bei der Ermittlung der Zeilen unter VBA um das Tabellenobjekt kümmern.
Ich hab in der Beispiel-Datei das Makro entsprechend angepasst.
2)Bezüglich der Import-Prüfung: Wie müsste denn der Code dazu aussehen? Angenommen er könnte die Dateinamen der importierten Dateien im Bereich L2:L(Zmax) ablegen?
Die Spalte mit den Dateinamen sollte ein Teil der Tabelle werden, damit es zu einer sauberen Verwaltung der Daten kommt - z.B. wenn die Tabelle anders sortiert wird.
Ich hab in der Beispiel-Datei das Makro entsprechend angepasst.
2.1) Können die Dateinamen auch in einem Dropdown-Feld (also innerhalb eines Feldes (Hier z.B. L2) abgelegt werden?
Eine einzelne Zelle ist für diese Zwecke nicht ideal, aber theorethisch auch möglich - allerdings nicht in der Titelzeile einer Tabelle. Besser ist es die Liste der bereits importierten Dateien als Liste in einem separaten Blatt zu erfassen. Diese kann man ggf. auch ausblenden.
Hierzu hab ich in der Beispiel-Datei eine entsprechende Variante des Makros erstellt.
Gruß
Franz
Beispieldatei:
https://www.herber.de/bbs/user/107967.xlsm
Anzeige
AW: Aus mehreren Workbooks Daten importieren
02.09.2016 11:43:45
Simon
Lieber Franz,
mir fehlen die Worte!
Ich werde wahrscheinlich noch Ewigkeiten brauchen, um deinen Code vollständig nachvollziehen und verinnerlichen zu können, aber eines steht für mich jetzt schon fest:
Ich verleihe Dir hiermit feierlich den Titel "Excel-Hero", wahlweise auch "Excel-Gott"! :D
Es funktioniert alles zu meiner vollsten Zufriedenheit und ich kann mich gar nicht genug bedanken!
Also vielen vielen vielen Dank an Dich!!!!!
Das hat mir jetzt auf der Arbeit Tage an Arbeit erspart :)
Also vielen vielen vielen Dank an Dich!!!
Gruß Simon

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige