Wechsel zwischen 2 Workbooks mit Kopieren und Einfügen in Excel
Schritt-für-Schritt-Anleitung
-
Workbook und Worksheet definieren: Zuerst musst du die beiden Workbooks (WBOriginal
und WBCopie
) und die entsprechenden Worksheets (wsoriginal
und wscopie
) definieren.
Dim WBOriginal As Workbook
Dim wsoriginal As Worksheet
Dim WBCopie As Workbook
Dim wscopie As Worksheet
-
Workbooks setzen: Setze die Workbooks, die du verwenden möchtest. Achte darauf, dass die Dateinamen korrekt sind.
Set WBOriginal = Workbooks("SH1_Wartung_A3_gesamt.xls")
Set WBCopie = Workbooks("SH1_WartungKW46_KW03.xls")
-
Durchlaufe alle Worksheets: Verwende eine Schleife, um durch jedes Worksheet im WBOriginal
zu iterieren.
For Each wsoriginal In WBOriginal.Worksheets
-
Daten kopieren: Wenn der Name des Worksheets mit "SH1" beginnt, kopiere den gewünschten Bereich.
If Mid(wsoriginal.Name, 1, 3) = "SH1" Then
wsoriginal.Range("BB5:BY100").Copy
-
Einfügen in das Ziel-Workbook: Verwende With
-Anweisung, um die Daten in das Ziel-Workbook einzufügen.
With WBCopie.Worksheets(wsoriginal.Name)
.Range("A5:X100").PasteSpecial Paste:=xlPasteValues
.Range("A5:X100").PasteSpecial Paste:=xlPasteFormats
End With
-
Aufräumen: Setze die Objekte auf Nothing
, um den Speicher freizugeben.
Set wsoriginal = Nothing
Set WBOriginal = Nothing
Set WBCopie = Nothing
Häufige Fehler und Lösungen
-
Laufzeitfehler 438: Dieser Fehler tritt auf, wenn du versuchst, auf eine Eigenschaft oder Methode zuzugreifen, die nicht unterstützt wird. Stelle sicher, dass der Worksheet-Name korrekt ist und dass das Worksheet tatsächlich existiert.
-
Falsches Workbook aktiv: Überprüfe, ob das gewünschte Workbook aktiv ist, bevor du versuchst, darauf zuzugreifen. Möglicherweise musst du das Workbook aktivieren, bevor du das Worksheet ansprechen kannst.
WBCopie.Activate
Alternative Methoden
Du kannst auch die Application.CutCopyMode
-Eigenschaft verwenden, um den Kopiermodus zu beenden, nachdem du die Daten eingefügt hast. Dies sorgt dafür, dass die Kopiermarkierung entfernt wird.
Application.CutCopyMode = False
Eine weitere Methode ist die Verwendung von Value
anstelle von PasteSpecial
, um die Werte direkt zu übertragen, ohne den Kopiermodus zu verwenden.
.WSOriginal.Range("BB5:BY100").Value = .Range("A5:X100").Value
Praktische Beispiele
Hier ist ein vollständiges Beispiel eines VBA-Skripts, das die oben genannten Schritte zusammenfasst:
Option Explicit
Sub KopierenORG_EinfügenCOPY()
Dim WBOriginal As Workbook
Dim WBCopie As Workbook
Dim wsoriginal As Worksheet
Set WBOriginal = Workbooks("SH1_Wartung_A3_gesamt.xls")
Set WBCopie = Workbooks("SH1_WartungKW46_KW03.xls")
For Each wsoriginal In WBOriginal.Worksheets
If Mid(wsoriginal.Name, 1, 3) = "SH1" Then
wsoriginal.Range("BB5:BY100").Copy
With WBCopie.Worksheets(wsoriginal.Name)
.Range("A5:X100").PasteSpecial Paste:=xlPasteValues
.Range("A5:X100").PasteSpecial Paste:=xlPasteFormats
End With
End If
Next wsoriginal
Application.CutCopyMode = False
End Sub
Tipps für Profis
- Vermeide die Verwendung von
Select
und Activate
, um den Code sauberer und schneller zu halten.
- Verwende
Option Explicit
, um sicherzustellen, dass alle Variablen deklariert werden, was Fehler reduziert.
- Teste deinen Code regelmäßig in einer sicheren Umgebung, bevor du ihn auf wichtige Daten anwendest.
FAQ: Häufige Fragen
1. Wie kann ich zwischen Excel Sheets wechseln?
Du kannst die Worksheets
-Methode verwenden, um zwischen den Sheets zu navigieren, z.B. Worksheets("Sheet1").Activate
.
2. Was tun, wenn der Code nicht funktioniert?
Überprüfe die Dateinamen und stelle sicher, dass die Workbooks geöffnet sind. Achte auch darauf, dass die Worksheet-Namen korrekt sind.