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.