Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 2 getrennte Bereiche kopieren (gesucht: VBA-Code)

2 getrennte Bereiche kopieren (gesucht: VBA-Code)
03.10.2006 21:38:43
Bernd
Hallo allerseits,
ich habe mir (mit Hilfe des Makrorekoders) folgenden Code zurecht gebastelt, um den Inhalt eines Blattes in ein anderes Blatt zu kopieren.
Range("A4:E10000").Select
Selection.Copy
Sheets("Tab2").Select
Range("A2").Select
ActiveSheet.Paste
Nun möchte ich gerne, dass nur der Inhalt der Zellen A4:C10000;E4:F10000 kopiert werden soll. Gebe ich das in obigen Code ein, funktioniert dies aber nicht.
Wie gibt man es ein?
Bin im Übrigen auch sonst dankbar, falls jemand obigen Code verbessern kann, und mir im Übrigen sagt, was dann daran falsch war.
Gruss
Bernd
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Code)
03.10.2006 21:57:30
Ali
Hi,

Sub copy()
Range("A4:E10000").copy Sheets("Tab2").Range("A2")
End Sub

Mehrere Bereiche müssen einzeln kopiert werden, kann auch in einer Schleife sein.
mfg Ali
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Code)
03.10.2006 22:00:41
Bernd
Danke, ich denke das hilft mir erstmal weiter. :-))))))))))
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Co
03.10.2006 22:15:48
EtoPHG
Hallo Bernd,
In obigem Code ist so ziemlich alles falsch, weil er mit dem Makrorecorder erstellt wurde...
Natürlich ein Witz mit ernstem Hintergrund (http://www.online-excel.de/excel/singsel_vba.php?f=78), also...
Angenommen:
Du willst die Bereiche A4:C10000 und E4:F10000 vom ersten Tabellenblatt auf das zweite Tabellenblatt ab Adresse A2 bzw. E2 kopieren und dabei nur die Werte (keine Formeln, keine Formate) mitnehmen, könnte das so heissen:

Sub x()
ActiveWorkbook.Sheets(1).Range("A4:C10000").Copy
ActiveWorkbook.Sheets(2).Range("A2").PasteSpecial Paste:=xlPasteValues
ActiveWorkbook.Sheets(1).Range("E4:F10000").Copy
ActiveWorkbook.Sheets(2).Range("E2").PasteSpecial Paste:=xlPasteValues
End Sub

Der Sinn der Operation mag sich dem Auftraggeber erschliessen ... ;-)
Gruss Hansueli
Anzeige
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Co
04.10.2006 00:20:52
Bernd
****In obigem Code ist so ziemlich alles falsch, weil er mit dem Makrorecorder erstellt wurde... ***
Ja, mag sein, aber für einen Anfänger ist es erstmal ziemlich praktisch etwas aufzunehmen, und den Code dann zumindest zu begreifen und selbst erweitern zu können.
Dass das nicht unbedingt immer die beste und reinste Variante ist, mag ja stimmen.
Aber momentan bin ich halt noch nicht weiter. :-(
Gruss
DC
Anzeige
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Co
04.10.2006 09:05:29
EtoPHG
Hallo Bernd,
Das mit dem "Im obigen Code..." war keineswegs als Mahnung und schon gar nicht als Beleidiung gemeint, sondern eher ironisch ;-)
Der Code sollte als Beispiel dienen.
Jetzt meldest Du eine Fehlermeldung und willst wissen was falsch ist.
Damit man Dir besser helfen kann, empfehle ich Dir folgendes:
1. Versuch mal genau zu schildern, was Dein Problem ist, bzw. was Du gedenkst mit dem Makro zu lösen.
2. Wenn Du eine Fehlermelung hast, unter welchen Umständen taucht sie auf und VOR ALLEM WIE LAUTET SIE ?
Gruss Hansueli
Anzeige
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Co
04.10.2006 10:36:16
Bernd
Guten Morgen,
***1. Versuch mal genau zu schildern, was Dein Problem ist, bzw. was Du gedenkst mit dem Makro zu lösen.***
Gerne. Es geht darum, dass ich eine Liste mit dem Autofilter jeweils nacheinander nach bestimmten Kriterien filtere, und die gefilterte Liste dann jeweils in ein anderes Tabellenblatt kopiere. Das funktionierte - trotz des schlechten Codes ;-) - bislang einwandfrei. Bis zu dem Punkt, an dem ich nur eins Spalte nicht mehr kopieren wollte. (s.Topic.)
Dank deinem Posting, wollte ich nun bei der Gelegenheit auch noch den sauberen Code (von dir) einfügen. Angepassst sieht das ganze nun bei mir wie folgt aus:
Sheets("Gesamtliste").Select
Selection.AutoFilter Field:=8, Criteria1:="Test"
Sheets("Gesamtliste").Range("A4:C10000").Copy
Sheets("Stärke").Range("A2").PasteSpecial Paste:=xlPasteValues
Sheets("Gesamtliste").Range("E4:F10000").Copy
Sheets("Stärke").Range("D2").PasteSpecial Paste:=xlPasteValues
***2. Wenn Du eine Fehlermelung hast, unter welchen Umständen taucht sie auf und VOR ALLEM WIE LAUTET SIE ?***
Die Fehlermeldung taucht in folgender Zeile auf (bzw. beim debuggen ist diese Zeile gelbt markiert):
Sheets("Stärkemeldung").Range("A2").PasteSpecial Paste:=xlPasteValues
und lautet: "Lautfzeitfehler 1004. Für diese Aktion müssen alle verbundenen Zellen dieselbe Größe haben". Die Meldung verwundert mich eher. Zwar befindet sich im Sheet "Stärke" in Zeile 1 eine verbundene Zelle, aber auf diese wird ja auch gar nicht zugegriffen. *wunder*
Gruss
Bernd
Anzeige
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Co
04.10.2006 12:35:58
Bernd
So, nach langem Suchen im Archiv habe ich jetzt glaube ich was gefunden, das funktioniert:
Worksheets("Gesamtliste").Range("A2:C10000").Copy
With Worksheets("Stärke").Range("A2")
.PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Co
04.10.2006 12:44:56
Bernd
Ich verbessere mich:
beim zweiten Mal funktioniert es nicht mehr. :-(((
Es erscheint obige gleiche Fehlermeldung, was augenscheinlich in der Tat darauf zurückzuführen ist, dass sich im Tabellenblatt noch verbundenen Zellen befinden (durch eine zuvor durchgeführte Kopieraktion).
Ich habe nun ganz am Anfang ein Makro eingefügt, was zunächst alle verbundenen Zellen beseitigt.
ActiveCell.Cells.Select
With Selection
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Hoffe, nun klappt es dauerhaft
gruss
b.
Anzeige
AW: 2 getrennte Bereiche kopieren (gesucht: VBA-Co
04.10.2006 12:55:39
Bernd
Ok, Schluss aus Ende... Jetzt habe ich in meinem Code so viel gefuscht, das nun irgendwie gar nichts mehr richtig funktioniert.
Wer kann mir bitte einfach mal den Code für das kopieren von Werten von einem Tabellenblatt (mit Bereich) in ein anderes Tabelleblatt nennen. ?
Gruss & Danke
B.
Anzeige
offene Frage
04.10.2006 13:24:20
Bernd
-
AW: offene Frage
04.10.2006 13:53:13
EtoPHG
Hallo Bernd,
Versuch's mal so:

Sub CopySheetValues()
Const tShFrom = "Gesamtliste"           ' Name der Quellen Tabelle
Const tShTo = "Stärke"                  ' Name des Ziel Tabelle
Const tDelCols = "D:D,G:G"              ' Zu löschenend Kolonnen in der Ziel Tabelle
Sheets(tShFrom).Cells.Copy
Sheets(tShTo).Range("A1").PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Sheets(tShTo).Range(tDelCols).Delete Shift:=xlToLeft
End Sub

Brauchst nur ev. die Werte in den 3 ersten Codezeilen zu verändern.
Gruss Hansueli
Anzeige
AW: offene Frage
04.10.2006 14:12:57
Bernd
***Const tDelCols = "D:D,G:G" ' Zu löschenend Kolonnen in der Ziel Tabelle***
Was soll das denn? Vor allem das G:G?
AW: offene Frage
04.10.2006 14:36:37
EtoPHG
Hallo Bernd,
Was soll das denn? Vor allem das G:G?
EIN BEISPIEL, NICHTS ANDERES.
PASS ES HALT AN; WIE DU ES MOECHSTEST ODER LASS ES WEG !!
Ich bin raus.
Gruss Hansueli
Anzeige
AW: offene Frage
04.10.2006 14:56:21
Bernd
Danke, hast mir sehr geholfen
Gruss
bernd
HILFE!
04.10.2006 00:33:25
Bernd
Hilfe, wenn ich den Code für meine Bedürfnisse anpasse, dann erhalte ich bei folgender Zeile ein fehlermeldung:
Sheets("Stärke").Range("A1").PasteSpecial Paste:=xlPasteValues
Was ist daran falsch?
PasteSpecial
04.10.2006 07:57:21
Ramses
Hallo
Entweder du arbeitest mit einer With-Anweisung
With ActiveWorkbook.Sheets(2)
oder du musst Sheets(2) vorher aktivieren
Gruss Rainer
Anzeige
AW: PasteSpecial
04.10.2006 10:26:47
Bernd
Morgen,
Vermutlich eine Dumme frage, aber wie müsste die Codezeile dann jeweils aussehen?
Und was ist von den beiden Varianten zu bevorzugen?
Gruss
Bernd
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

2 getrennte Bereiche in Excel mit VBA kopieren


Schritt-für-Schritt-Anleitung

Um in Excel VBA mehrere Bereiche zu kopieren, kannst du den folgenden VBA-Code verwenden. Dieser Code kopiert die Bereiche A4:C10000 und E4:F10000 vom ersten in das zweite Tabellenblatt und fügt sie in die Zellen A2 bzw. E2 ein:

Sub CopyRanges()
    ' Kopiere Bereich A4:C10000
    ActiveWorkbook.Sheets(1).Range("A4:C10000").Copy
    ActiveWorkbook.Sheets(2).Range("A2").PasteSpecial Paste:=xlPasteValues

    ' Kopiere Bereich E4:F10000
    ActiveWorkbook.Sheets(1).Range("E4:F10000").Copy
    ActiveWorkbook.Sheets(2).Range("E2").PasteSpecial Paste:=xlPasteValues

    ' Deaktiviere den Kopiermodus
    Application.CutCopyMode = False
End Sub

Wenn du diesen Code ausführst, werden nur die Werte (keine Formate oder Formeln) in das Zielblatt eingefügt. Achte darauf, dass die Zielzellen nicht verbunden sind, da dies zu Fehlern führen kann.


Häufige Fehler und Lösungen

  1. Laufzeitfehler 1004: "Für diese Aktion müssen alle verbundenen Zellen dieselbe Größe haben."

    • Lösung: Überprüfe, ob die Zielzellen verbunden sind. Wenn ja, entferne die Verbindung oder ändere die Zielzellen.
  2. Keine Werte kopiert:

    • Lösung: Stelle sicher, dass du den richtigen Bereich angegeben hast und dass das Quellblatt die Daten enthält.

Alternative Methoden

Eine andere Möglichkeit, mehrere Bereiche in Excel VBA zu kopieren, ist die Verwendung von Arrays. Hier ein Beispiel:

Sub CopyMultipleRanges()
    Dim rngArray As Range
    Set rngArray = Union(Sheets(1).Range("A4:C10000"), Sheets(1).Range("E4:F10000"))
    rngArray.Copy
    Sheets(2).Range("A2").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

Mit Union kannst du mehrere Bereiche zusammenfassen und effizient kopieren.


Praktische Beispiele

Wenn du z.B. eine Liste mit Autofilter in einem Tabellenblatt hast und nur die gefilterten Werte in ein anderes Blatt kopieren möchtest, kann der Code so aussehen:

Sub CopyFilteredValues()
    Sheets("Gesamtliste").Range("A4:C10000").SpecialCells(xlCellTypeVisible).Copy
    Sheets("Stärke").Range("A2").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

Hierbei wird nur der sichtbare Bereich (die gefilterten Werte) kopiert.


Tipps für Profis

  • Verwende With-Anweisungen für lesbaren und effizienteren Code:

    With Sheets("Stärke")
        .Range("A2").PasteSpecial Paste:=xlPasteValues
    End With
  • Fehlerhandling: Implementiere On Error Resume Next, um Fehler abzufangen und die Ausführung nicht zu stoppen.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Bereiche in einem Schritt kopieren? Du kannst die Union-Funktion verwenden, um mehrere Bereiche zu kombinieren, bevor du sie kopierst.

2. Was ist der Unterschied zwischen Copy und PasteSpecial in VBA? Copy kopiert die Auswahl in die Zwischenablage, während PasteSpecial ermöglicht, spezifische Inhalte (wie nur Werte) einzufügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige