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

Forumthread: Wechsel zwischen 2 Workbooks mit kopieren Einfügen

Wechsel zwischen 2 Workbooks mit kopieren Einfügen
13.11.2007 12:28:49
Ha-Jü
Hallo zusammen,
nachstehender Code soll best. Bereich in WBOriginal.wsoriginal copieren und in
WBCopie.wscopie (d.h. sheet mit GLEICHEM Namen an best. Stelle einfügen.
Kann mir da jemand auf die Sprünge helfen?

Sub KopierenORG_EinfügenCOPY()
Dim WBOriginal As Workbook
Dim wsoriginal As Worksheet
Dim WBCopie As Workbook
Dim wscopie As Worksheet
Dim blattname As Worksheet
Set WBOriginal = Workbooks("SH1_Wartung_A3_gesamt.xls")
Set WBCopie = Workbooks("SH1_WartungKW46_KW03.xls")
WBOriginal.Activate
For Each wsoriginal In WBOriginal.Worksheets
If Mid(wsoriginal.Name, 1, 3) = "SH1" Then
Set blattname = wsoriginal
Range("BB5:BY100").Select
Selection.Copy
'Fehlerquelle
 WBCopie.blattname.Activate
Range("A5:X100").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
Next wsoriginal
End Sub


Gruss Ha-Jü

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Wechsel zwischen 2 Workbooks mit kopieren Einfügen
13.11.2007 12:59:30
Hajo_Zi
Hallo Nick,
in VBA kann auf select usw. zu 99,9% verzicvhtet werden.

Option Explicit
Sub KopierenORG_EinfügenCOPY()
Dim WBOriginal As Workbook
Dim wsoriginal As Worksheet
Dim WBCopie As Workbook
Dim wscopie As Worksheet
Dim blattname As Worksheet
Set WBOriginal = Workbooks("SH1_Wartung_A3_gesamt.xls")
Set WBCopie = Workbooks("SH1_WartungKW46_KW03.xls")
WBOriginal.Activate
For Each wsoriginal In WBOriginal.Worksheets
If Mid(wsoriginal.Name, 1, 3) = "SH1" Then
Set blattname = wsoriginal
wsoriginal.Range("BB5:BY100").Copy
With WBCopie.blattname
.Range("A5:X100").PasteSpecial Paste:=xlPasteValues
.Range("A5:X100").PasteSpecial Paste:=xlPasteFormats
End With
End If
Next wsoriginal
Set blattname = Nothing
End Sub



Anzeige
AW: Wechsel zwischen 2 Workbooks mit kopieren Einfügen
13.11.2007 13:22:02
Ha-Jü
Hallo HaJo,
bei Aufruf der Programmzeile:
with wbCopie.blattname
kommt der Programmabbbruch mit
Laufzeifehler 438
Objekt unterstützt diese Eigenschaft nicht

Welche Anweisung (in deinem Code) fehlt denn da noch?
Gruss Ha-Jü.

AW: Wechsel zwischen 2 Workbooks mit kopieren Einfügen
13.11.2007 13:39:51
Hajo_Zi
Hallo Nick,
ich habe mich an DeinenCoide gehalten und wollte ohne Testung auskommen, da der Code ja lief.

Option Explicit
Sub KopierenORG_EinfügenCOPY()
Dim WBOriginal As Workbook
Dim wsoriginal As Worksheet
Dim WBCopie As Workbook
Dim wscopie As Worksheet
Dim blattname As Worksheet
Set WBOriginal = Workbooks("Bildschirm.xlsm")
Set WBCopie = Workbooks("Mappe1.xlsm")
For Each wsoriginal In WBOriginal.Worksheets
If Mid(wsoriginal.Name, 1, 3) = "SH1" Then
Set blattname = wsoriginal
wsoriginal.Range("BB5:BY100").Copy
With WBCopie
.Worksheets(blattname.Name).Range("A5:X100").PasteSpecial Paste:=xlPasteValues
.Worksheets(blattname.Name).Range("A5:X100").PasteSpecial Paste:=xlPasteFormats
End With
End If
Next wsoriginal
Set blattname = Nothing
Set WBOriginal = Nothing
Set WBCopie = Nothing
End Sub


Gruß Hajo

Anzeige
AW: Wechsel zwischen 2 Workbooks mit kopieren Einfügen
13.11.2007 14:24:00
Ha-Jü
Hallo HaJo,
danke für Deine Hilfe,
With WBCopie
war der Schlüssel zum Erfolg,
Sehr gut,
Gruss Ha-Jü.
;
Anzeige
Anzeige

Infobox / Tutorial

Wechsel zwischen 2 Workbooks mit Kopieren und Einfügen in Excel


Schritt-für-Schritt-Anleitung

  1. 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
  2. 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")
  3. Durchlaufe alle Worksheets: Verwende eine Schleife, um durch jedes Worksheet im WBOriginal zu iterieren.

    For Each wsoriginal In WBOriginal.Worksheets
  4. 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
  5. 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
  6. 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.

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