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

Bereiche in neue Arbeitsmappe kopieren

Bereiche in neue Arbeitsmappe kopieren
06.12.2019 00:30:06
Richard
Liebe Forumsmitglieder,
ich verzweifle gerade an einer Aufgabe, die ich als "Standardaufgabe" betrachtet habe und dachte, in der Vergangenheit auch schon öfter gelöst zu haben.
Ich habe eine Arbeitsmappe mit diversen Tabellenblättern. In dieser Datei werden verschieden Ausgangsdaten verarbeitet und Liquiditätsplanungen für mehrere Firmen erstellt. Jede Planung ist dabei in einem eigenen Tabellenblatt (Tabelle1, 2, 3).
Nun sollen jeweils Ausschnitte dieser Planungen in ein neues Arbeitsblatt kopiert werden. Dabei soll für jede Firma / jeden Ausschnitt in der Zieldatei ein Tabellenblatt vorhanden sein. [Die Zieltabelle wird dann als PDF gespeichert und evtl. direkt per Mail versandt. Aber das ist hier nicht die Problemstellung.]
Da die zu kopierenden Bereiche sich verändern können, werden diese in der Ausgangsdatei (Tabelle15) abgelegt und in VBA „dynamisch“ ausgelesen.
Was mir jetzt nicht gelingt und auch in der Vergangenheit nie so Aufgabenstellung war, ist die gezielte Ansprache des jeweiligen Tabellenblattes in der Zieldatei.
Mein Code sieht bisher so aus:

Sub Bankenspiegel()
Application.ScreenUpdating = False
Dim intAnzahlTab As Integer
Dim i As Integer
Dim rngGoki As Range
Dim rngImmo As Range
Dim rngSons As Range
Dim pdfName As String
Dim strName As String
Dim wkbZiel As Workbook
Dim wkbQuelle As Workbook
Set wkbQuelle = ThisWorkbook
pdfName = ThisWorkbook.Path & "\" & Format(Tabelle24.Cells(21, 3), "yyyy_mm_dd") & "  _
Bankenspiegel" & ".pdf"
With Tabelle1
Set rngHolding = .Range("A1:" & Tabelle15.Cells(25, 8))
Set rngImmo = .Range("A1:" & Tabelle15.Cells(26, 8))
Set rngSons = .Range("A1:" & Tabelle15.Cells(27, 8))
End With
intAnzahlTab = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 3
Set wkbZiel = Workbooks.Add
Set wkbZiel = ActiveWorkbook
'ActiveWorkbook.Name = pdfName
Application.SheetsInNewWorkbook = intAnzahlTab
‘Firma 2 kopieren
strName = Tabelle1.Name
rngHolding.Copy Destination:=wkbZiel.Tabelle1
With Range("A1")
'nur die Werte werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'nur die Formate werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
Cells.EntireColumn.AutoFit
wkbZiel.Tabelle1.Name = strName
‘Firma 2 kopieren
strName = Tabelle2.Name
rngImmo.Copy 'Destination:=wkbZiel.Tabelle2
With Range("A1")
'nur die Werte werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'nur die Formate werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
Cells.EntireColumn.AutoFit
wkbZiel.Tabelle2.Name = strName
‘Firma 3 kopieren
Application.CutCopyMode = False
Application.Goto reference:=Tabelle1.Range("A1")
Application.ScreenUpdating = True
End Sub

Im Prinzip hat das Kopieren schon funktioniert, solange ich lediglich
rngHolding.Copy
geschrieben habe.
Aber das hat natürlich dann bei dem zweiten Kopiervorgang dazu geführt, dass die Daten in der Zieltabelle überschrieben wurden. Daher wollte ich das Ziel mit Copy Destination direkt ansprechen. Aber Excel teilt mir mit, dass das Objekt die Methode oder der Eigenschaft nicht unterstützt. Die gleiche Meldung bekomme ich auch beim Ändern der Tabellennamen in der Zieltabelle (wkbZiel.Tabelle1.Name = strName).
Kann mir jemand einen Hinweis geben, wie ich dies Problem gelöst bekomme und vielleicht auch, wo mein Denkfehler bei der Vorgehensweise ist? Für mich ist es nämlich noch immer ganz logisch, dass ich das Ziel mit der "Syntax" Arbeitsmappe.Tabelle.Bereich anspreche.
Vielen Dank im Voraus!
Beste Grüße
Richard

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereiche in neue Arbeitsmappe kopieren
06.12.2019 07:43:47
Torsten
Hallo Richard,
ich habe fuer den Kopiervorgang den Code mal abgeaendert. Du hast 2 verschiedene Moeglichkeiten des Kopierens in einem Code vereint. Das geht nicht. Entweder ".Copy Destination:=" oder .Copy und dann .PasteSpecial.
Ich habs mal bei dem PasteSpecial belassen, da man hier die Moeglichkeiten der xl Parameter fuer Values, Formate usw. hat.
Probiers mal aus und sag bescheid, wenns noch irgendwo hakt.
Gruss Torsten

Sub Bankenspiegel()
Application.ScreenUpdating = False
Dim intAnzahlTab As Integer
Dim i As Integer
Dim rngGoki As Range
Dim rngImmo As Range
Dim rngSons As Range
Dim pdfName As String
Dim strName As String
Dim wkbZiel As Workbook
Dim wkbQuelle As Workbook
Set wkbQuelle = ThisWorkbook
pdfName = wkbQuelle.Path & "\" & Format(wkbQuelle.Tabelle24.Cells(21, 3), "yyyy_mm_dd") & " _
Bankenspiegel" & ".pdf"
With wkbQuelle.Tabelle1
Set rngHolding = .Range("A1:" & wkbQuelle.Tabelle15.Cells(25, 8))
Set rngImmo = .Range("A1:" & wkbQuelle.Tabelle15.Cells(26, 8))
Set rngSons = .Range("A1:" & wkbQuelle.Tabelle15.Cells(27, 8))
End With
intAnzahlTab = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 3
Set wkbZiel = Workbooks.Add
Set wkbZiel = ActiveWorkbook
'ActiveWorkbook.Name = pdfName
Application.SheetsInNewWorkbook = intAnzahlTab
'Firma 2 kopieren
strName = wkbQuelle.Tabelle1.Name
rngHolding.Copy
With wkbZiel.Tabelle1.Range("A1")
'nur die Werte werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'nur die Formate werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
Cells.EntireColumn.AutoFit
wkbZiel.Tabelle1.Name = strName
'Firma 2 kopieren
strName = wkbQuelle.Tabelle2.Name
rngImmo.Copy 'Destination:=wkbZiel.Tabelle2
With wkbZiel.Tabelle2.Range("A1")
'nur die Werte werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'nur die Formate werden in die neue Datei an gleicher Stelle übertragen
.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
Cells.EntireColumn.AutoFit
wkbZiel.Tabelle2.Name = strName
'Firma 3 kopieren
Application.CutCopyMode = False
Application.Goto reference:=Tabelle1.Range("A1")
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Bereiche in neue Arbeitsmappe kopieren
06.12.2019 12:23:30
Richard
Hallo Thomas,
vielen Dank für Deine Unterstützung.
Deine Variante ist einem meiner dem Posting vorhergehenden Versuche sehr ähnlich. Immer schön an die Reihenfolge Arbeitsmappe.Tabelle.Bereich halten.
Wenn ich Dein Skript laufen lasse, bekomme ich in der Zeile
With wkbQuelle.Tabelle1
wieder die Fehlermeldung 'Laufzeitfehler 438 Objekt unterstützt dieses Ereignis oder Methode nicht'.
Wenn ich dann diese Zeile auf meinen Ursprungscode (With Tabelle1) zurückdrehe, kommt die gleiche Fehlermeldung in der folgenden Zeile, in der die Range für rngHolding ausgelesen wird. Wenn ich diese Zeile zurückdrehe, kommt der Fehler in der folgenden Zeile. Und so weiter. Auch die Skriptzeile With wbkZiel.Tabelle1.Range("A1") wird mit dieser Fehlermedlung quittiert.
Irgendetwas ist mit den Ausdrücken wkbQuelle.Tabelle#.Range(...) bzw. wkbZiel.Tabelle#.Range(...) nicht in Ordnung und ich komme nicht dahinter, was es ist.
Hast Du oder ein anderes Mitglied eine Idee, wo der Fehler stecken könnte?
Besten Dank und viele Grüße
Richard
Anzeige
AW: Bereiche in neue Arbeitsmappe kopieren
06.12.2019 12:28:38
Torsten
Hallo Richard,
verwende mal anstatt z.B. Tabelle1 die richtigen Tabellennamen nach dem Muster
wkbQuelle.Sheets("Tabelle1").Range....
Gruss Torsten
AW: Bereiche in neue Arbeitsmappe kopieren
07.12.2019 09:09:17
Richard
Hallo Torsten,
vielen Dank! Das war die Lösung. Jetzt läuft alles, wie vorgesehen.
Ich lerne daraus, dass ein Range-Objekt offensichtlich mit der Ansprache über die interne Bezeichnung Tabelle# nicht oder nicht in jedem Fall klar kommt, sondern die Ansprache über Sheets("Name") erfolgen muss.
Ich nutze diese Ansprache ungern, denn zumeist verwende ich meine Tabellen nicht selbst, sondern MitarbeiterInnen. Und versehentlich die interne Bezeichnung von z.B. Tabelle1 auf Tabelle5 zu ändern, ist fast ausgeschlossen. Den Namen eines Tabellenblattes von z.B. "Holding" in "Holding2" oder auch "dghjagdKJU" zu ändern, gelingt schon einfacher und dann fährt das Skript mit Sheets("Holding") natürlich gegen die Wand...
Daher noch eine Frage: Wie könnte ich meine Aufgabenstellung grundsätzlich auch anders lösen? Ein vollständiges Skript erwarte ich NICHT. Aber ein Hinweis mit welchen Befehls-/Methodenkombinationen ich alternativ zum Ziel kommen kann, würde mich interessieren.
Aber nochmals herzlichen Dank für die tolle und schnelle Unterstützung. Mein kleines Projekt kann jetzt Montag schon "ausgerollt" werden.
Danke, Torsten
Schönes Adventswochenende wünscht
Richard
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige