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

Daten übertragen aus mehreren Dateien und mehreren Sheets

Daten übertragen aus mehreren Dateien und mehreren Sheets
21.01.2020 09:51:21
Markus
Hallo Leute,
ich hoffe ihr könnt mir helfen. Ich komme aktuell nicht weiter, weil ich nicht weiß, wo der Fehler liegt. Ich habe 3 Dateien und möchte diese nacheinander öffnen und die Daten aus den Tabellen ganz einfach über kopieren in die Masterdatei einfügen. Ich habe mehrere Reiter pro Datei, die alle abgearbeitet werden sollen. In der Masterdatei sollen die kopierten Bereiche untereinander eingefügt werden. (pro Reiter 3 Stück / jeweils 1 Bereich aus jeder Datei)
Aber anscheinend kopiert er mir nur aus der ersten Datei den Bereich und auch nur den ersten Teil. Den zweiten macht er gar nicht. Ich habe versucht den Code ziemlich einfach zu halten.
Ich danke euch schon einmal für eure Hilfe.
LG Markus
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim wsdatei As Worksheet
Dim pfad As String
Dim datei As String
Dim bereichkopieren As Range
Dim wb As Workbook
Dim bereichstückzahl As Range
Application.DisplayAlerts = False
' Erste Datei CNC öffnen und kopieren ---------------------------------------------------------- _
pfad = ThisWorkbook.Path
datei = Dir(pfad & "\" & "20200115_Fehlerauswertung_CNC.xlsx")
Workbooks.Open pfad & "\" & datei, ReadOnly:=True
Set wb = Workbooks(datei)
Set bereichstückzahl = Range("C19:DX19")
Set bereichkopieren = Range("C6:DX18")
For Each wsdatei In wb.Worksheets
bereichkopieren.Copy
ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
Range("C6").Select
ActiveCell.PasteSpecial
End If
Next ws
'wb.Activate
Next wsdatei
For Each wsdatei In wb.Worksheets
bereichstückzahl.Copy
ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
Range("C45").Select
ActiveCell.PasteSpecial
End If
Next ws
wb.Activate
Next wsdatei
wb.Close
' Zweite Datei Pressen öffnen und kopieren ----------------------------------------------------- _
datei = Dir(pfad & "\" & "20200115_Fehlerauswertung_Pressen.xlsx")
Workbooks.Open pfad & "\" & datei, ReadOnly:=True
Set wb = Workbooks(datei)
Set bereichstückzahl = Range("C19:DX19")
For Each wsdatei In wb.Worksheets
Set bereichkopieren = Range("C6:DX18")
bereichkopieren.Copy
ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
Range("C19").Select
ActiveCell.PasteSpecial
End If
Next ws
wb.Activate
Next wsdatei
For Each wsdatei In wb.Worksheets
bereichstückzahl.Copy
ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
Range("C46").Select
ActiveCell.PasteSpecial
End If
Next ws
wb.Activate
Next wsdatei
wb.Close
' Dritte Datei Versand öffnen und kopieren ----------------------------------------------------- _
datei = Dir(pfad & "\" & "20200115_Fehlerauswertung_Versand.xlsx")
Workbooks.Open pfad & "\" & datei, ReadOnly:=True
Set wb = Workbooks(datei)
Set bereichstückzahl = Range("C19:DX19")
For Each wsdatei In wb.Worksheets
Set bereichkopieren = Range("C6:DX18")
bereichkopieren.Copy
ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
Range("C32").Select
ActiveCell.PasteSpecial
End If
Next ws
wb.Activate
Next wsdatei
For Each wsdatei In wb.Worksheets
bereichstückzahl.Copy
ThisWorkbook.Activate
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
Range("C47").Select
ActiveCell.PasteSpecial
End If
Next ws
wb.Activate
Next wsdatei
wb.Close
Application.DisplayAlerts = True
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Daten übertragen aus mehreren Dateien und mehreren Sheets
21.01.2020 10:43:00
Torsten
Hallo Markus,
hab den Code mal ein bisschen angepasst und hoffe jetzt funktionierts wie gewuenscht. Wenn noch was fehlt oder unklar ist, melde dich einfach wieder.

Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim wsdatei As Worksheet
Dim pfad As String
Dim datei As String
Dim bereichkopieren As Range
Dim wb As Workbook
Dim bereichstückzahl As Range
Application.DisplayAlerts = False
' Erste Datei CNC öffnen und kopieren ---------------------------------------------------------- _
_
pfad = ThisWorkbook.Path
datei = "20200115_Fehlerauswertung_CNC.xlsx"
Workbooks.Open pfad & "\" & datei, ReadOnly:=True
Set wb = Workbooks(datei)
For Each wsdatei In wb.Worksheets
Set bereichkopieren = wb.Sheets(wsdatei.Name).Range("C6:DX18")
bereichkopieren.Copy
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
ThisWorkbook.Sheets(ws.Name).Range("C6").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Next ws
Next wsdatei
For Each wsdatei In wb.Worksheets
Set bereichstückzahl = wb.Sheets(wsdatei.Name).Range("C19:DX19")
bereichstückzahl.Copy
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
ThisWorkbook.Sheets(ws.Name).Range("C45").PasteSpecial xlPasteValues
End If
Next ws
Next wsdatei
wb.Close savechanges:=False
' Zweite Datei Pressen öffnen und kopieren ----------------------------------------------------- _
_
datei = "20200115_Fehlerauswertung_Pressen.xlsx"
Workbooks.Open pfad & "\" & datei, ReadOnly:=True
Set wb = Workbooks(datei)
For Each wsdatei In wb.Worksheets
Set bereichkopieren = wb.Sheets(wsdatei.Name).Range("C6:DX18")
bereichkopieren.Copy
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
ThisWorkbook.Sheets(ws.Name).Range("C19").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Next ws
Next wsdatei
For Each wsdatei In wb.Worksheets
Set bereichstückzahl = wb.Sheets(wsdatei.Name).Range("C19:DX19")
bereichstückzahl.Copy
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
ThisWorkbook.Sheets(ws.Name).Range("C46").PasteSpecial xlPasteValues
End If
Next ws
Next wsdatei
wb.Close savechanges:=False
' Dritte Datei Versand öffnen und kopieren ----------------------------------------------------- _
_
datei = "20200115_Fehlerauswertung_Versand.xlsx"
Workbooks.Open pfad & "\" & datei, ReadOnly:=True
Set wb = Workbooks(datei)
For Each wsdatei In wb.Worksheets
Set bereichkopieren = wb.Sheets(wsdatei.Name).Range("C6:DX18")
bereichkopieren.Copy
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
ThisWorkbook.Sheets(ws.Name).Range("C32").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
Next ws
Next wsdatei
For Each wsdatei In wb.Worksheets
Set bereichstückzahl = wb.Sheets(wsdatei.Name).Range("C19:DX19")
bereichstückzahl.Copy
For Each ws In ThisWorkbook.Worksheets
If ws.Name = wsdatei.Name Then
ThisWorkbook.Sheets(ws.Name).Range("C47").PasteSpecial xlPasteValues
End If
Next ws
Next wsdatei
wb.Close savechanges:=False
Application.DisplayAlerts = True
End Sub

Gruss Torsten
Anzeige
AW: Daten übertragen aus mehreren Dateien und mehreren Sheets
21.01.2020 14:19:39
Markus
Hallo Torsten,
vielen Dank für deine Hilfe. Das scheint zu funktionieren. Damit ich für das nächste Mal schlauer bin, kannst du mir kurz sagen, woran es genau gelegen hat? Ich habe gesehen, dass du xlpastevalues eingefügt hast und application.cutcopymode=flase. Hat der vorher das Kopierte nicht richtig aus dem Speicher gelöscht?
Vielen Dank auf jeden Fall für deine Hilfe.
AW: Daten übertragen aus mehreren Dateien und mehreren Sheets
21.01.2020 14:36:48
Torsten
Hallo Markus,
nein daran liegts eigentlich nicht. xlPasteValues sagt eigentlich nur, dass nur die Werte uebertragen werden. Application.CutCopyMode = False leert den Excel Zwischenspeicher und hebt die Kopiermarkierung wieder auf.
Dein Problem war die Datei- und Tabellenblattreferenzierung. Du musst VBA immer sagen, in welcher Datei und welchem Tabellenblatt Aktionen durchgefuehrt werden sollen, ansonsten macht das VBA immer in der gerade aktiven Datei auf dem gerade aktiven Tabellenblatt. Das kann natuerlich ein Durcheinander geben, wenn du mit verschiedenen Dateien und Blaettern arbeitest. Also immer Workbooks("Dateiname").Sheets("Tabellenname). dann die Range und die Aktion. Wenn du dir Schreibarbeit sparen willst, speicherst du dies alles in Variablen, wie du das schon teilweise richtig angefangen hast.
Uebrigens hab ich Application.CutCopyMode = False noch an einigen Stellen vergessen. Kannst du bitte noch einfuegen immer nach dem Paste Befehl.
Gruss Torsten
Anzeige
AW: Daten übertragen aus mehreren Dateien und mehreren Sheets
21.01.2020 15:10:08
Markus
Ok Super vielen Dank noch einmal.
gerne...
22.01.2020 07:14:44
Torsten

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige