Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bereich mit VBA kopieren

Bereich mit VBA kopieren
Climbi
Hallo,
wenn ich einen Bereich aus einem Blatt in ein anderes Blatt kopieren will, dann klappt folgendes:
Range(Cells(1, 1), Cells(10, 5)).Value = Worksheets(2).Range("A1:E10").Value
Leider funktioniert es nicht, wenn ich den Quellbereich auch mit Cells definiere, genau das benötige ich aber.
So geht es leider nicht.
Range(Cells(1, 1), Cells(10, 5)).Value = Worksheets(2).Range(Cells(1, 1), Cells(10, 5)).Value
Vielen Dank im Voraus.
Gruß Climbi
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
probiers mit With ...
12.06.2012 08:09:04
Matthias
Hallo Climbi
Versuchs mal so
Sub Xcode()
With Worksheets(2)
Range(Cells(1, 1), Cells(10, 5)).Value = .Range(.Cells(1, 1), .Cells(10, 5)).Value
End With
End Sub
Gruß Matthias
AW: probiers mit With ...
12.06.2012 09:41:09
Climbi
Hallo Mathias,
Dein Code bringt keine Fehlermeldung, aber er bewirkt auch nichts.
Ich will ja den Inhalt vom Blatt 2 in das Blatt 1 kopieren.
Wenn ich vor Range den Tabellenblattname eingebe, dann erhalte ich bei der Ausführung einen Fehler.
Anzeige
AW: probiers mit With ...
12.06.2012 09:58:31
hary
Hallo Climbi
Kann es sein das Du das Makro aus einer anderen Tabelle startest bzw. Tabelle2 ist die aktive?
da:

Range(Cells(1, 1), Cells(10, 5)).Value

der Bereich im aktiven Blatt ist.
Weise beiden Bereichen mal den Blattnamen zu.

With Worksheets(2)
Worksheets(1).Range(Worksheets(1).Cells(1, 1), Worksheets(1).Cells(10, 5)).Value = .Range(. _
Cells(1, 1), .Cells(10, 5)).Value
End With

gruss hary
Anzeige
AW: probiers mit With ...
12.06.2012 10:23:50
Climbi
Hallo hary,
so geht es .
With Worksheets(2)
Worksheets(1).Range(Worksheets(1).Cells(1, 1), Worksheets(1).Cells(10, 5)).Value = .Range(. _
Cells(1, 1), .Cells(10, 5)).Value
End With
Ich denke mein Fehler war, dass ich Worksheets(1) vorher nur einmal verwendet habe
also:
Worksheets(1).Range(Cells(1, 1), Cells(10, 5).Value
Vielen vielen Dank
Gruß Climbi
Anzeige
keine Probleme ...
12.06.2012 10:24:36
Matthias
Hallo
Wer hat denn gesagt das Du vor Range den Blattnamen setzen sollst / musst ?
Du musst Dich nicht mal im Zielblatt befinden, nur der Code gehört in dieses Blatt
Und es sollte nicht Sheets(2) sein ;o)
Desweiteren bin ich im Bsp davon ausgegangen das nur Werte übertragen werden
Mit Formeln habe ich nicht geteset
https://www.herber.de/bbs/user/80526.xls
Gruß Matthias
Anzeige
die mE bessere Variante (ohne BlattIndex)
12.06.2012 11:44:18
Matthias
Hallo
Option Explicit
Sub Xcode3()          'Erklärung(Code in ein allgem. Modul)
'RegisterblattName und Index der Blätter spielen so keine Rolle mehr!
Dim wksQ As Worksheet ' Quelle
Dim wksZ As Worksheet ' Ziel
Set wksQ = Tabelle2   ' CodeName! der Tabelle
Set wksZ = Tabelle1   ' CodeName! der Tabelle
With wksQ
wksZ.Range(wksZ.Cells(1, 1), wksZ.Cells(10, 5)).Value = .Range(.Cells(1, 1), .Cells(10, 5)). _
Value
End With
End Sub
Nun ist es auch egal in welchem Blatt Du Dich gerade befindest.
Gruß Matthias
Anzeige
AW: die mE bessere Variante (ohne BlattIndex)
12.06.2012 11:53:16
Climbi
Hallo Matthias,
super, der letzte Code von Dir funktioniert und ich verstehe ihn sogar :-)
ich habe wieder was gelernt.
Vielen Dank nochmals. Gruß Climbi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Bereich mit VBA kopieren


Schritt-für-Schritt-Anleitung

Um einen Bereich mit VBA zu kopieren, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf dein Projekt im Projekt-Explorer und wähle Einfügen > Modul.

  3. Schreibe den VBA-Code: Verwende folgenden Code, um einen Bereich von einem Arbeitsblatt in ein anderes zu kopieren:

    Sub BereichKopieren()
       Dim wksQ As Worksheet ' Quelle
       Dim wksZ As Worksheet ' Ziel
       Set wksQ = Worksheets(2) ' Blatt 2 als Quelle
       Set wksZ = Worksheets(1) ' Blatt 1 als Ziel
    
       With wksQ
           wksZ.Range(wksZ.Cells(1, 1), wksZ.Cells(10, 5)).Value = .Range(.Cells(1, 1), .Cells(10, 5)).Value
       End With
    End Sub
  4. Führe das Makro aus: Schließe den VBA-Editor und drücke ALT + F8, wähle BereichKopieren und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler bei der Range-Definition: Wenn du den Quellbereich mit Cells definierst und einen Fehler erhältst, stelle sicher, dass du den Blattnamen korrekt angibst. Verwende unbedingt With Worksheets(x) für den Quellbereich.

  • Kein Effekt beim Ausführen: Stelle sicher, dass das Makro im richtigen Arbeitsblatt ausgeführt wird. Wenn du das Makro in einem anderen Blatt startest, könnte es sein, dass es nicht funktioniert.

  • Fehlerhafte Zellenreferenzen: Achte darauf, dass du die richtige Syntax verwendest. Beispiel:

    Range(Cells(1, 1), Cells(10, 5)).Value

Alternative Methoden

Eine alternative Methode zum Kopieren eines Bereichs ist die Verwendung der Copy- und Paste-Methoden:

Sub BereichKopierenUndEinfügen()
   Worksheets(2).Range("A1:E10").Copy
   Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub

Hierbei wird der Bereich kopiert und anschließend in das Zielblatt eingefügt, wobei nur die Werte übertragen werden.


Praktische Beispiele

  1. Bereich kopieren und einfügen:

    Sub Beispiel1()
       Worksheets(2).Range("A1:E10").Copy Destination:=Worksheets(1).Range("A1")
    End Sub
  2. Zellbereich kopieren:

    Sub Beispiel2()
       Dim sourceRange As Range
       Set sourceRange = Worksheets(2).Range(Cells(1, 1), Cells(10, 5))
       sourceRange.Copy
       Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
    End Sub

Diese Beispiele zeigen, wie du mit dem vba range kopieren Befehl effektiv arbeiten kannst.


Tipps für Profis

  • Verwende Option Explicit: Zu Beginn jedes Moduls hilft dir dies, alle Variablen zu deklarieren und mögliche Fehler zu vermeiden.
  • Nutze PasteSpecial: Um nur bestimmte Inhalte (z.B. nur Werte) zu kopieren, verwende die PasteSpecial-Methode.
  • Vermeide Select und Activate: Diese Methoden verlangsamen deinen Code. Arbeite direkt mit Objekten, um effizienter zu sein.

FAQ: Häufige Fragen

1. Wie kann ich einen Bereich in eine andere Arbeitsmappe kopieren?
Du musst die Arbeitsmappe zuerst öffnen und dann den Bereich wie gewohnt kopieren und einfügen, indem du die Arbeitsmappe referenzierst.

2. Was ist der Unterschied zwischen Range.Copy und Range.Value?
Range.Copy kopiert nicht nur die Werte, sondern auch Formate und Formeln, während Range.Value nur die Werte überträgt.

3. Kann ich mehrere Bereiche gleichzeitig kopieren?
Ja, du kannst mehrere Bereiche in einer Schleife kopieren, indem du die entsprechenden Range-Objekte in einer For-Schleife definierst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige