Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
844to848
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
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten aus mehreren Arbeitsblättern kopieren

Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 15:02:52
paul
Hallo Forum,
ich habe folgendes Problem:
ich habe eine Datei mit mehreren Arbeitsblättern (Arbeitsblatt "1" bis "Vorlage").
Zwischen den Arbeitsblättern "1" und "Vorlage" werden im Laufe des Jahres immer wieder Kopien vom Arbeitsblatt "Vorlage" erzeugt und vor dem Arbeitsblatt "Vorlage" eingefügt. Nun möchte ich aus diesen Arbeitsblättern "1" bis "Vorlage" die Zellbereiche H6:H32 und Q6:Q32 in eine andere Excel-Datei kopieren.
Das müßte also folgendermaßen aussehen:
Quellbereich von Arbeitsblatt "1" H6:H32 in Zielbereich A2:A28
Quellbereich von Arbeitsblatt "1" Q6:Q32 in Zielbereich B2:B28
Quellbereich von Arbeitsblatt "2" H6:H32 in Zielbereich A29:56
Quellbereich von Arbeitsblatt "2" Q6:Q32 in Zielbereich B29:B56
..
..
..
..
Bis zum Arbeitsblatt "Vorlage"
Hat jemand eine Idee wie ich das auf die Reihe bekommen kann ?
Gruß
Paul

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 16:12:23
Beni
Hallo Paul,
auch wenn du den Level: VBA nein hast, das geht nur mit einem Makro.
Gruss Beni

Sub Daten_aus_mehreren_Arbeitsblättern_kopieren()
Dim WS2 As Worksheet
Set WS2 = Workbooks("Mappe3").Worksheets("Tabelle1") ' Name anpassen
For sh = 1 To Sheets.Count
If Not Sheets(sh).Name = "Vorlage" Then
With Sheets(sh)
lz = WS2.Cells(Rows.Count, 1).End(xlUp).Row + 1
Range(.Cells(6, 8), .Cells(32, 8)).Copy WS2.Cells(lz, 1)
Range(.Cells(6, 17), .Cells(32, 17)).Copy WS2.Cells(lz, 2)
End With
End If
Next sh
End Sub

AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 16:40:57
Paul
Hallo Beni,
dein Makro müßte ich in die Quelldatei einfügen. Das habe ich auch versucht; hat aber nicht geklappt. Ich muss noch ergänzen, dass alle betroffenen Arbeitsblätter mit "KW" beginnen. Es gibt in der Quelldatei noch andere Arbeitsblätter (diese heißen jedoch anders und stehen hinter dem Arbeitsblatt "Vorlage". Aber evtl. ließe sich das Makro so schreiben, dass alle Arbeitsblätter, die mit "KW" beginnen vom Makro berücksichtigt werden.
Kann das Makro auch so aufgebaut werden, dass ich es in die Zieldatei einfügen könnte ?
Gruß
Paul
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 17:15:24
Beni
Hallo Paul,
das Makro muss in der Quelldatei stehen und gestartet werden,
es spielt keine Rolle wie die Tabellen heissen und wo sie stehen, darum das
If Not Sheets(sh).Name = "Vorlage" Then
schaue auf die richtige Schreibweise von
Set WS2 = Workbooks("Mappe3").Worksheets("Tabelle1") ' Name anpassen
Gruss Beni
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 17:26:22
Paul
Hallo Beni,
ich habe es geschafft, dass das Makro läuft; aber der Zellzeiger muss auf einem der Quellarbeitsblätter ("KW *")stehen, weil sonst wird eine Fehlermeldung erzeugt.(bspw. Zellzeiger steht auf anderem Arbeitsblatt als "KW *" oder "Vorlage")
Läßt es sich auch einrichten, dass das Makro den Zielbereich konsequent überschreibt ? Wenn ich nämlich das Makro zweimal aufrufe, habe ich alle Einträge doppelt.(der zweite Aufruf wird an den ersten Aufruf angefügt)
Mir persönlich würde es allerdings besser gefallen, wenn ich das Makro von der Zieldatei aus aufrufe. (Quelldatei enthält bereits zahlreiche Makros)
Gruß Paul
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 17:35:35
Beni
Hallo Paul,
Gruss Beni

Sub Daten_aus_mehreren_Arbeitsblättern_kopieren()
Dim WS2 As Worksheet
Set WS2 = Workbooks("Mappe3").Worksheets("Tabelle1") ' Name anpassen
WS2.Cells.ClearContents ' Zielbereich löschen
For sh = 1 To Sheets.Count
If Not Sheets(sh).Name = "Vorlage" Then
With Sheets(sh)
lz = WS2.Cells(Rows.Count, 1).End(xlUp).Row + 1
Range(.Cells(6, 8), .Cells(32, 8)).Copy WS2.Cells(lz, 1)
Range(.Cells(6, 17), .Cells(32, 17)).Copy WS2.Cells(lz, 2)
End With
End If
Next sh
End Sub

AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 17:58:28
Paul
Hallo Beni,
danke jetzt funktioniert es soweit, dass der Zielbereich geölscht wird, ehe neue Daten dahin kopiert werden.
Woran liegt es aber, dass ein Fehler erzeugt wird, wenn ich beim Aufruf des Makros mit dem Zellzeiger nicht in einem der Quell-Arbeitsblätter stehe ?
Gruß
Paul
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 18:04:03
Paul
Oder hat doch jemand eine Lösung, wie das Makro aufgebaut sein muss, damit das Makro von der Zieldatei aus aufgerufen werden kann ?
Ich würde den Makroaufruf dann nämlich gerne mit einer Schaltfläche im Ziel-Arbeitsblatt steuern.
Gruß
Paul
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 18:35:27
Kurt
.Range(.Cells(6, 8), .Cells(32, 8)).Copy WS2.Cells(lz, 1)
.Range(.Cells(6, 17), .Cells(32, 17)).Copy WS2.Cells(lz, 2)
Jeweils vor Range müssen Punkte sein.
mfg Kurt
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 18:45:24
Paul
Hallo Kurt,
danke, das mit den Punkten erzeugt nun nicht mehr den Fehler; nun kann ich in einem beliebigen Arbeitsblatt stehen und das Makro aufrufen.
Nochmals zu meinem Wunsch, das Makro von der Ziel-Datei aus aufzurufen:
Geht das nicht, oder ist das Makro dann um einiges aufwändiger ?
Es wäre für mich eben komfortabler, wenn ich das Makro nicht aus der Quell-Datei aufrufen müsste.
Gruß
Paul
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
11.02.2007 20:03:47
Paul
Hallo Forum,
mir ist noch eines bei diesem Makro aufgefallen: Es kopiert die Formeln mit; mir reicht es aber, wenn das Makro nur die Werte kopieren würde.
Was muss ich dazu noch ändern ?
Hat noch jemand eine Idee, wie ich von der Zieldatei aus die Daten aus der Quelldatei kopieren kann ? (Makro steht in der Zieldatei und nicht in der Quelldatei)
Gruß
Paul
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 03:16:07
Hans
Hallo Paul,
zum Thema Werte statt Formeln:
Wenn neben den Formeln auch keine Formatierungen übernommen werden sollen, einfach nur folgende Syntax:

Worksheets("Tabelle1").Range("A1:F16").Value = Worksheets("Tabelle2").Range("D6:I21").Value

Wenn nicht die Formeln, aber die Formatierung mit übernommen werden soll:

Worksheets("Tabelle1").Range("A1:F16").Copy
With Worksheets("Tabelle2")
.Range("D6").PasteSpecial xlPasteValues
.Range("D6").PasteSpecial xlPasteFormats
End With

Zum Thema "Position des Codes":
Es gibt eine einfache Grundregel: Die VBA-Aktionen beziehen sich immer auf das aktive Blatt. Ist also Tabelle1 aktiv, heisst es:

Range("A1:F16").Value = Worksheets("Tabelle2").Range("D6:I21").Value

Ist aber Tabelle2 aktiv, dann:

Worksheets("Tabelle1").Range("A1:F16").Value = Range("D6:I21").Value

Auf der sicheren Seite liegst Du, wenn du beide Seiten komplett benennst. Wenn Du die Blätter dann vorher noch an Objektvariablen übergibst, behältst Du die Übersicht:

Dim wksA as WorkSheet, wksB as WorkSheet
Set wksA = WorkBooks("Mappe1.xls").Worksheets("Tabelle1")
Set wksA = WorkBooks("Mappe2.xls").Worksheets("Tabelle2")
wksA.Range("A1:F16").Value = wksB.Range("D6:I21").Value

gruss hans
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 07:18:08
Paul
Hallo Herr Herber,
ich habe mal aus Ihren Angaben und dem ersten Vorschlag von Beni ein Makro zusammengestellt; es läuft allerdings noch nicht. Es sieht wie folgt aus:

Sub Daten_aus_mehreren_Arbeitsblättern_kopieren()
Dim wksA As Worksheet, wksB As Worksheet
Set wksA = Workbooks("FE-Laufzeit.xls").Worksheets("Tabelle1") ' Name anpassen
Set wksB = Workbooks("Planung_Reihenfolge_2007.xls").Worksheets("KW 1") ' Name anpassen
'wksA.Range("A1:F16").Value = wksB.Range("D6:I21").Value
wksA.Cells.ClearContents ' Zielbereich löschen
For sh = 1 To Sheets.Count
If Not Sheets(sh).Name = "Vorlage" Then
With Sheets(sh)
lz = wksB.Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range(.Cells(6, 12), .Cells(32, 12)).Copy wksB.Cells(lz, 1)
.Range(.Cells(6, 21), .Cells(32, 21)).Copy wksB.Cells(lz, 2)
.Range(.Cells(6, 24), .Cells(32, 24)).Copy wksB.Cells(lz, 3)
End With
End If
Next sh
End Sub

wohin mit diesem Code um nur Werte zu kopieren
Worksheets("Tabelle1").Range("A1:F16").Value = Worksheets "Tabelle2").Range "D6:I21").Value
mein Problem besteht auch darin von wksB das Arbeitsblatt zu bestimmen: Es sind verschiedene Abrietsblätter, aber alle Beginnen mit den Buchstaben KW und unterscheiden sich dann in der darauffolgenden Zahl (für Kalenderwoche)
Ist es erforderlich dass ich den Range benenne ? (wksA.Range("A1:F16").Value = wksB.Range("D6:I21").Value) Ich habe doch keinen zusammenhängenden Bereich zu kopieren sondern 3 verschiedene Spaltenbereiche
Gruß
Paul
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 07:58:10
Hans
Hallo Paul,
ich Deinem Code befinden sich ein paar Widersprüche, die ich hoffentlich richtig aufgelöst habe. Unklar ist mir das mit der Ermittlung der letzten gefüllten Zelle in Spalte A der Zieltabelle, denn in dem Blatt hast Du vorher mal alles gelöscht, da ist nix mehr. Achte also darauf, dass der Code im Zusammenhang mit dieser Variable kaum stimmen kann:

Sub Daten_aus_mehreren_Arbeitsblättern_kopieren()
Dim wksA As Worksheet, wksB As Worksheet
Dim sh As Integer, lz As Integer
Set wksA = Workbooks("FE-Laufzeit.xls").Worksheets("Tabelle1")
wksA.Cells.ClearContents
For sh = 1 To Workbooks("Planung_Reihenfolge_2007.xls").Worksheets.Count
If Not Sheets(sh).Name = "Vorlage" Then
Set wksB = Workbooks("Planung_Reihenfolge_2007.xls").Worksheets(sh)
With Sheets(sh)
lz = wksA.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksA.Range(wksA.Cells(lz, 1), wksA.Cells(lz + 26, 1)).Value = _
wksB.Range(wksB.Cells(6, 12), wksB.Cells(32, 12)).Value
wksA.Range(wksA.Cells(lz, 2), wksA.Cells(lz + 26, 2)).Value = _
wksB.Range(wksB.Cells(6, 21), wksB.Cells(32, 21)).Value
wksA.Range(wksA.Cells(lz, 3), wksA.Cells(lz + 26, 3)).Value = _
wksB.Range(wksB.Cells(6, 24), wksB.Cells(32, 24)).Value
End With
End If
Next sh
End Sub

gruss hans
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 10:36:35
Paul
Hallo Herr Herber,
der Code wird mit einer Fehlermeldung abgebrochen.
Läßt sich der Code nicht so aufbauen, dass die Daten nur aus Arbeitsblättern, welche mit KW beginnen, berücksichtigt werden.
Jetzt sieht es ja folgendermaßen aus:
If Not Sheets(sh).Name = "Vorlage" Then
Ich weiß aber, dass ausschließlich Arbeitsblätter deren Name mit KW beginnt als Datenlieferant dienen kann.
Ließe es sich irgendwie in folgender Art aufbauen:
If Sheets(sh).Name = "KW *" Then
Gruß Paul
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 11:25:03
Hans
... sicher:
If InStr(WorkSheets(sh).Name, "KW") Then
gruss hans
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 11:36:52
Paul
Hallo Herr Herber,
nachdem ich Ihre Änderung mit der Passage "If Not Sheets(sh).Name ..." ersetzt habe erhalte ich folgende Meldung:
Laufzeitfehler '9'
Index außerhalb des gültigen Bereichs
Mein Code sieht inzwischen wie folgt aus:

Sub Daten_aus_mehreren_Arbeitsblättern_kopieren()
Dim wksA As Worksheet, wksB As Worksheet
Dim sh As Integer, lz As Integer
Set wksA = Workbooks("FE-Laufzeit.xls").Worksheets("Tabelle1")
wksA.Cells.ClearContents
For sh = 1 To Workbooks("Planung_Reihenfolge_2007.xls").Worksheets.Count
If InStr(Worksheets(sh).Name, "KW") Then
Set wksB = Workbooks("Planung_Reihenfolge_2007.xls").Worksheets(sh)
With Sheets(sh)
lz = wksA.Cells(Rows.Count, 1).End(xlUp).Row + 1
wksA.Range(wksA.Cells(lz, 1), wksA.Cells(lz + 26, 1)).Value = _
wksB.Range(wksB.Cells(6, 12), wksB.Cells(32, 12)).Value
wksA.Range(wksA.Cells(lz, 2), wksA.Cells(lz + 26, 2)).Value = _
wksB.Range(wksB.Cells(6, 21), wksB.Cells(32, 21)).Value
wksA.Range(wksA.Cells(lz, 3), wksA.Cells(lz + 26, 3)).Value = _
wksB.Range(wksB.Cells(6, 24), wksB.Cells(32, 24)).Value
End With
End If
Next sh
End Sub

Wo liegt denn noch der Hund begraben ?
Gruß Paul
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 13:06:14
Hans
... weil entweder:
- keine Arbeitsmappe FE-Laufzeit.xls geöffnet ist oder
- sich in einer Arbeitsmappe FE-Laufzeit.xls kein Blatt Tabelle1 befindet oder
- keine Arbeitsmappe Planung_Reihenfolge_2007.xls geöffnet ist.
gruss hans
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 15:21:28
Paul
Hallo Herr Herber,
ich habe beide Dateien geöffnet (Quell- und Zieldatei)
Es existiert auch die Tabelle1.
Wenn bei der Fehlermeldung auf Debuggen klicke, ist folgende Zeile im Code markiert:
If InStr(Worksheets(sh).Name, "KW") Then
Gruß Paul
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 15:32:50
Hans
... ja, die Sache ist klar, eine ungenügende Referenzierung. Beim Makrostart ist die Zielarbeitsmappe die aktive, also muss es heissen:
If InStr(Workbooks("Planung_Reihenfolge_2007.xls").Worksheets(sh).Name, "KW") Then
Zudem macht der With-Rahmen keinen Sinn.
gruss hans
Anzeige
AW: Daten aus mehreren Arbeitsblättern kopieren
12.02.2007 15:45:14
Paul
Hallo Herr Herber,
es funktioniert einwandfrei. Ich musste allerdings den With-Rahmen entfernen. Ich weiß auch nicht m,it welchem Hintergrund dieser mal in den Code aufgenommen wurde.
Ich danke hiermit allen die mir geholfen haben.
Ganz besonders Ihnen Herr Herber für diese Plattform
! D A N K E !
Gruß Paul

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige