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

Forumthread: VBA - Worksheets.Paste funktion

VBA - Worksheets.Paste funktion
12.06.2015 11:54:55
Jochen
Hallo liebes Herber-Forum,
ich habe folgendes Problem, an dem ich verzweifle.
ich habe in Excel ein Registerblatt "Nachweis", dass mit Funktionen, Makros und bestimmten Zellen, Zeilen und Spaltenformatierungen versehen ist.
Aus diesem Registerblatt "Nachweis" heraus werden per Markobutton weitere Registerblätter mit vorgegebenen Registernamen erstellt, die Namen holt sich das Makro aus dem Registerblatt "Personal".
Während die Schleife die Registerblätter generiert und umbenennt, soll auch der Inhalt mit allen Formatierungen des Registerblattes "Nachweis" in die neuen Registerblätter kopiert werden und das ist der Punkt, den ich einfach nicht hinbekomme.
Hier kommt der VBA-Code:
Sub Tabellenblätter_generieren()
Dim Zelle, Bereich As Range
Dim i As Integer
Dim nWS As Worksheet
Dim Bool As Boolean
Sheets("Personal").Select
Set Bereich = Range("F3:F" & Range("F65536").End(xlUp).Row)
For Each Zelle In Bereich
For i = 2 To Worksheets.Count
If Worksheets(i).Name = Zelle.Value Then
Bool = True
Exit For
Else
Bool = False
End If
Next i
If Bool = False Then
Set nWS = Worksheets.Add(after:=Worksheets(Worksheets.Count))
nWS.Name = Zelle.Value

'---- hier der rudimentäre Versuch den Inhalt mit allen
'     Formatierungen zu kopieren. Auch Pastespecial
Worksheets("Nachweis").UsedRange.Copy
Worksheets(i).Paste
' hiermit werden leider die Zeilen und Spaltenformate nicht kopiert
' auch  Worksheets(i).PasteSpecial Paste:=xlPasteValues oder
'                  ...PasteSpecial Paste:=xlPasteFormats führen
nur zu einem Fehler 400
'-----
End If
Next Zelle
Sheets("Nachweis").Select
End Sub
Sicherlich ein kleiner Schritt für einen von Euch, ein zu großer für mich. Ich würde mich freuen, wenn mir einer auf die Sprünge helfen könnte.
Habe mich auch schon mit dem Makrorecorder dran gemacht um mal zu schauen, wie der die Lösung aufzeichnet.
Sub Inhalte_generieren()
' Inhalte_generieren Makro
Sheets("Nachweis").Select
Cells.Select
Selection.Copy
Sheets("Delf").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
bin aber nicht in der Lage den Code in meinen o.g. Code zu übernehmen.
Vielen Dank im Voraus
Jochen

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Worksheets.Paste funktion
12.06.2015 12:05:53
Rudi
Hallo,
kpier doch einfach das sheet Nachweis.
Sub Tabellenblätter_generieren()
Dim Zelle, Bereich As Range
Dim i As Integer
Dim nWS As Worksheet
Dim Bool As Boolean
With Sheets("Personal")
Set Bereich = .Range("F3:F" & .Range("F65536").End(xlUp).Row)
End With
For Each Zelle In Bereich
For i = 2 To Worksheets.Count
If Worksheets(i).Name = Zelle.Value Then
Bool = True
Exit For
Else
Bool = False
End If
Next i
If Bool = False Then
Worksheets("nachweis").Copy after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Zelle.Value
End If
Next Zelle
Sheets("Nachweis").Select
End Sub
Gruß
Rudi

Anzeige
AW: VBA - Worksheets.Paste funktion
12.06.2015 12:49:26
Jochen
Hallo Rudi,
super schnell, super gut!! Auf die Idee bin ich einfach nicht gekommen.
Danke für die Unterstützung.
Gruß
Jochen
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Anwendung der Worksheets.Paste Funktion in Excel


Schritt-für-Schritt-Anleitung

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

  2. Erstelle ein neues Modul: Rechtsklicke im Projektfenster auf „VBAProject (DeineDatei.xlsx)“ und wähle „Einfügen“ > „Modul“.

  3. Füge den folgenden Code ein:

    Sub Tabellenblätter_generieren()
       Dim Zelle, Bereich As Range
       Dim i As Integer
       Dim nWS As Worksheet
       Dim Bool As Boolean
    
       With Sheets("Personal")
           Set Bereich = .Range("F3:F" & .Range("F65536").End(xlUp).Row)
       End With
    
       For Each Zelle In Bereich
           For i = 2 To Worksheets.Count
               If Worksheets(i).Name = Zelle.Value Then
                   Bool = True
                   Exit For
               Else
                   Bool = False
               End If
           Next i
    
           If Bool = False Then
               Worksheets("Nachweis").Copy after:=Worksheets(Worksheets.Count)
               ActiveSheet.Name = Zelle.Value
           End If
       Next Zelle
    
       Sheets("Nachweis").Select
    End Sub
  4. Anpassen der Namen: Stelle sicher, dass die Registerblätter „Nachweis“ und „Personal“ existieren.

  5. Führe das Makro aus: Drücke F5, um das Makro auszuführen und die neuen Blätter zu erstellen.


Häufige Fehler und Lösungen

  • Fehler 400: Dieser Fehler tritt häufig auf, wenn du versuchst, ein nicht existierendes Blatt zu referenzieren. Überprüfe die Namen deiner Blätter und stelle sicher, dass sie korrekt sind.
  • Formatierungen gehen verloren: Wenn du die Methode Worksheets(i).Paste verwendest, könnte es sein, dass Formatierungen nicht korrekt übernommen werden. Nutze stattdessen Worksheets("Nachweis").Copy und dann ActiveSheet.Paste, um die gesamte Formatierung zu erhalten.

Alternative Methoden

  • Kopieren des gesamten Blatts: Anstatt nur Inhalte zu kopieren, kannst du das gesamte Arbeitsblatt mit Worksheets("Nachweis").Copy kopieren. Dies ist eine einfachere Methode, die alle Inhalte und Formatierungen beibehält.

  • Verwendung von PasteSpecial: Möchtest du nur spezifische Elemente kopieren (z. B. nur Werte oder nur Formate), kannst du die PasteSpecial-Methode verwenden:

    Worksheets(i).PasteSpecial Paste:=xlPasteValues

Praktische Beispiele

Hier sind einige Anwendungsbeispiele, die zeigen, wie du paste vba effektiv nutzen kannst:

  1. Kopieren von Werten ohne Formatierung:

    Worksheets("Nachweis").UsedRange.Copy
    Worksheets("NeuesBlatt").Range("A1").PasteSpecial Paste:=xlPasteValues
  2. Kopieren von Formaten:

    Worksheets("Nachweis").UsedRange.Copy
    Worksheets("NeuesBlatt").Range("A1").PasteSpecial Paste:=xlPasteFormats

Tipps für Profis

  • Verwende With ... End With: Diese Struktur hilft, den Code lesbarer und effizienter zu machen.

  • Vermeide die Verwendung von .Select: Stattdessen kannst du direkt auf das Blatt zugreifen. Zum Beispiel:

    Worksheets("Nachweis").Range("A1").Value = "Neuer Wert"
  • Optimierung der Performance: Setze Application.ScreenUpdating = False vor dem Kopieren und True danach, um die Performance zu verbessern, besonders bei großen Datenmengen.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine kopierten Daten immer aktuell sind? Du kannst ein Makro erstellen, das regelmäßig ausgeführt wird, um die Daten zu aktualisieren.

2. Was mache ich, wenn ein Blatt nicht erstellt werden kann, weil es bereits existiert? Überprüfe im Code, ob das Blatt bereits existiert, bevor du versuchst, es zu erstellen, um Fehler zu vermeiden.

3. Kann ich auch mehrere Blätter gleichzeitig kopieren? Ja, du kannst eine Schleife verwenden, um mehrere Blätter nacheinander zu kopieren und zu benennen.

4. Warum funktioniert ActiveSheet.Paste manchmal nicht? Stelle sicher, dass du zuvor etwas kopiert hast, und dass das Zielblatt aktiv ist.

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