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

Forumthread: VBA: Diagramm kopieren, Paste-Fehler

VBA: Diagramm kopieren, Paste-Fehler
11.02.2021 13:56:24
Max
Hallo liebe Forum-Mitglieder und Excel-Götter*innen,
ich möchte mit VBA ein Diagramm kopieren und so oft in Zeilen darunter einfügen, bis Anzahl kleiner Diagramme = Anzahl Versuche (Makro: "CopyDiagram3"). Das große Übersichts-Diagramm soll auf Sheet1 bleiben, deshalb geht die Schleife von Anzahl_Diagramme+1 To Anzahl_Charts. Anhand der Zählvariable wird der Datenbereich des Diagramms angepasst.
Zwei einfachere/grundlegendere Makros habe ich dabei gelassen:
- "CopyDiagram" kopiert einmalig ein Diagramm und die Zeile darunter
- "CopyDiagram2" kopiert mittels Schleife von i = 2 To 3 ein Diagramm in die darunter liegenden Zeilen.
Alle Makros haben einmal prima funktioniert. Wenn ich allerdings Versuche hinzufüge und "CopyDiagram3" erneut ausführe, gibt es Paste-Methoden-Fehler oder "Anwendungs- oder objektorientierter Fehler".
Selbst, wenn ich Diagramme, die von den beiden simplen Makros eingefügt wurden, lösche und das Makro erneut ausführe, erscheinen dabei Paste-Fehler.
Werden Charts Nummer zugewiesen, die ich falsch annehme?
Wo liegt mein Fehler bzw. welche Bedingungen muss ich hinzufügen, damit "CopyDiagram3" funktioniert?
xlsm: https://www.herber.de/bbs/user/143822.xlsm
Vielen Dank im Voraus für eure Zeit und Hilfe.
Viele Grüße
Max
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Diagramm kopieren
11.02.2021 14:19:42
Beverly
Hi Max,
wenn ich dein Anliegen richtig interpretiere, dann müsste es so funktionieren:
Sub CopyDiagram3()
Dim i As Long
With ThisWorkbook.Worksheets("Sheet1")
q = .Cells(5, 14).Value
.ChartObjects(2).Copy
For i = 1 To q
.Paste
With .ChartObjects(.ChartObjects.Count)
.Top = Range("C" & 8 + i).Top
.Left = Range("C" & 8 + i).Left
With .Chart.SeriesCollection(3)
.Name = "=Sheet1!$B$" & 8 + i
.XValues = "=Sheet1!$F$5:$I$5"
.Values = "=Sheet1!$F$" & 8 + i & ":$I$" & 8 + i
.Border.ColorIndex = 10
.Format.Line.Weight = 1
End With
End With
Next
End With
End Sub


Anzeige
AW: VBA: Diagramm kopieren
11.02.2021 14:37:25
Max
Hallo Beverly,
wieder mal dankeschön für deine schnelle Antwort.
Leider führt mich auch dein Code zur Zeile, in der ".Paste" steht, mit dem Fehler:
"Laufzeitfehler '1004': Die Paste-Methode des Worksheet-Objektes konnte nicht ausgeführt werden."
Die Variable, die die Anzahl an Charts im Sheet zählt, brauche ich, damit nur die Diagramme genau dieser neu hinzugekommenen Versuchen erstellt werden. Beginnt die Schleife bei eins, dauert der Kopiervorgang inkl. Datenbereichsanpassung mit mehr Versuchen immer länger und über z.B. dem Diagramm der dritten Messung liegen irgendwann 20 Kopien drüber, womit die Dateigröße immer weiter steigt.
Oder wo liegt mein Denk- bzw. VBA-Fehler?
Viele Grüße
Max
Anzeige
AW: VBA: Diagramm kopieren
11.02.2021 14:47:46
Max
(da mein Problem noch nicht gelöst ist, aktiviere ich hiermit nochmal das Kontrollkästchen)
AW: VBA: Diagramm kopieren
11.02.2021 15:53:28
Firmus
Hallo Max,
chartsObjects.count steht auf "1". Du willst aber Nr. "2" kopieren.
Nr. "2" existiert aber nicht, ergo Fehler 1004.
Wie gefunden?
Debug einiger Zähler, Ersetzen von ".ChartObjects(2).Copy" durch ".ChartObjects(1).Copy".
Schon läuft das Macro durch (aber mit falschem Copy...).
Wie reproduzieren?
1. Das kleine Chart in Zelle C8 löschen. (Damit fehlt chart(2) im Object.)
2. Einen deiner 3 Kopierbuttons drücken. JEDER bringt den Fehler 1004.
Warum chart in c8 fehlt? Keine Ahnung, musst du wissen.
Gruß,
Firmus
Buttonsdann
Anzeige
AW: VBA: Diagramm kopieren
11.02.2021 17:32:18
Beverly
Hi Max,
das kann ich in deiner hochgeladenen Mappe nicht nachvollziehen - der Code läuft problemlos durch und erstellt in Spalte C 5 neue Diagramme.
Wenn immer neue Diagramm hinzukommen würde ich aber anstelle der Variablen für die Anzahl an Diagrammen stattdessen die Zeile verwenden, in der sich das letzte Diagramm in Spalte C befindet:
Sub CopyDiagram3()
Dim i As Long
Dim chrDia As ChartObject
Dim lngZeile As Long
With ThisWorkbook.Worksheets("Sheet1")
For Each chrDia In .ChartObjects
If chrDia.TopLeftCell.Column = 3 Then
If chrDia.TopLeftCell.Row > lngZeile Then lngZeile = chrDia.TopLeftCell.Row
End If
Next chrDia
lngZeile = lngZeile + 1
q = .Cells(5, 14).Value
.ChartObjects(2).Copy
For i = 1 To q
.Paste
With .ChartObjects(.ChartObjects.Count)
.Top = Range("C" & lngZeile).Top
.Left = Range("C" & lngZeile).Left
With .Chart.SeriesCollection(3)
.Name = "=Sheet1!$B$" & lngZeile
.XValues = "=Sheet1!$F$5:$I$5"
.Values = "=Sheet1!$F$" & lngZeile & ":$I$" & lngZeile
.Border.ColorIndex = 10
.Format.Line.Weight = 1
End With
End With
lngZeile = lngZeile + 1
Next
End With
End Sub


Anzeige
Copy-Paste funktioniert nur mit Einzelschritt
11.02.2021 15:39:53
Max
Mir ist aufgefallen, dass meine Makros super funktionieren, wenn ich sie in Einzelschritten ausführe.
Ich muss also VBA dazu bringen, dass Copy und Paste sauber nacheinander ausgeführt werden, wenn ich das gesamte Makro mit einmal starte.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Diagramm kopieren und Paste-Fehler beheben


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Modul einfügen: Klicke im Projekt-Explorer mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub CopyDiagram3()
        Dim i As Long
        Dim chrDia As ChartObject
        Dim lngZeile As Long
        With ThisWorkbook.Worksheets("Sheet1")
            For Each chrDia In .ChartObjects
                If chrDia.TopLeftCell.Column = 3 Then
                    If chrDia.TopLeftCell.Row > lngZeile Then lngZeile = chrDia.TopLeftCell.Row
                End If
            Next chrDia
            lngZeile = lngZeile + 1
            q = .Cells(5, 14).Value
            .ChartObjects(2).Copy
            For i = 1 To q
                .Paste
                With .ChartObjects(.ChartObjects.Count)
                    .Top = Range("C" & lngZeile).Top
                    .Left = Range("C" & lngZeile).Left
                    With .Chart.SeriesCollection(3)
                        .Name = "=Sheet1!$B$" & lngZeile
                        .XValues = "=Sheet1!$F$5:$I$5"
                        .Values = "=Sheet1!$F$" & lngZeile & ":$I$" & lngZeile
                        .Border.ColorIndex = 10
                        .Format.Line.Weight = 1
                    End With
                End With
                lngZeile = lngZeile + 1
            Next
        End With
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über ALT + F8 aus.


Häufige Fehler und Lösungen

  • Laufzeitfehler '1004': Dieser Fehler tritt häufig auf, wenn das Diagramm, das du kopieren möchtest, nicht existiert. Stelle sicher, dass du die richtige Diagrammnummer angibst. Verwende .ChartObjects(1).Copy statt .ChartObjects(2).Copy, wenn nur ein Diagramm vorhanden ist.

  • Copy-Paste-Fehler: Wenn das Makro nicht wie erwartet funktioniert, kann es hilfreich sein, die Paste-Anweisung in eine DoEvents Anweisung einzufügen, um sicherzustellen, dass Excel genug Zeit hat, um die Operation auszuführen:

    .Paste
    DoEvents

Alternative Methoden

  • Diagramm als Bild speichern: Eine andere Methode, um Diagramme zu kopieren, besteht darin, das Diagramm als Bild zu speichern und dann einzufügen. Hierzu kannst du Export-Methoden verwenden:

    .ChartObjects(2).Chart.Export "C:\Path\to\your\chart.png", "PNG"
  • Manuelles Kopieren: Du kannst das Diagramm auch manuell kopieren (Strg+C) und dann an der gewünschten Stelle einfügen (Strg+V), um Fehler zu vermeiden.


Praktische Beispiele

  • Beispiel 1: Kopiere ein Diagramm aus "Sheet1" in "Sheet2":

    Sub CopyToAnotherSheet()
        ThisWorkbook.Worksheets("Sheet1").ChartObjects(1).Copy
        ThisWorkbook.Worksheets("Sheet2").Paste
    End Sub
  • Beispiel 2: Erstelle mehrere Kopien eines Diagramms mit unterschiedlichen Datenbereichen:

    For i = 1 To 5
        .ChartObjects(1).Copy
        .Paste
        .ChartObjects(.ChartObjects.Count).Top = 100 * i
    Next i

Tipps für Profis

  • Verwendung von Variablen: Um den Code flexibler zu gestalten, verwende Variablen für die Diagrammnummer und den Bereich, an den du das Diagramm einfügen möchtest.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um potenzielle Probleme elegant abzufangen:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
        MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Warum erhalte ich einen Paste-Fehler?
Der Paste-Fehler tritt häufig auf, wenn das Diagramm, das du kopieren möchtest, nicht mehr existiert oder die Zielzelle ungültig ist. Überprüfe die Diagrammnummer und die Zellenposition.

2. Wie kann ich die Anzahl der Diagramme dynamisch anpassen?
Du kannst die letzte Zeile mit Diagrammen ermitteln, indem du eine Schleife verwendest, die alle Diagramme durchläuft und deren Positionen überprüft. So wird sichergestellt, dass du immer die korrekten Diagramme kopierst und einfügst.

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