Excel 2010 VBA löscht Diagramm

Ich unterstütze eine Excel VBA-Anwendung in meiner Freizeit. Ich bin ein Verfahrenstechniker, kein professioneller Entwickler.

Die Diagrammteile der Anwendung haben in Excel 2007 problemlos funktioniert. Meine Firma führt ein Upgrade auf Excel 2010 durch, und die gleiche Anwendung hat jetzt Probleme mit der Interaktion mit den Diagrammen in Arbeitsblättern.

Das Problem ist mit einem Balkendiagramm. Die Anwendung löscht beim Löschen die Reihe mit dem folgenden Code aus dem Diagramm. Ich tat dies, damit während des Importierens/Verarbeitens neuer Daten keine Zeit angezeigt wird, in der dem Benutzer ein Diagramm präsentiert wird, das nicht mit den neuesten Daten auf dem neuesten Stand ist.

        'select the histogram chart
        Sheets(sChartSheet).Select
        ActiveSheet.ChartObjects("Chart 15").Activate

        Call PBarCaption("Delete Existing Histogram Series")
        'remove any existing series
        For i = 1 To ActiveChart.SeriesCollection.Count
            ActiveChart.SeriesCollection(1).Delete
        Next i

erstellt dann eine neue Serie, wenn neue zu erfassende Daten aus einer externen Datendatei importiert werden:

    'add series for histogram
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Values = "=HistogramData!$B$5:$B$29"
    ActiveChart.SeriesCollection(1).XValues = "=HistogramData!$A$5:$A$29"
    ActiveChart.SeriesCollection(1).charttype = xlColumnClustered

Das Problem mit 2010 ist, dass gelegentlich, wenn der VBA-Code ausgeführt wird, das gesamte Balkendiagramm "verloren" (gelöscht) ist, anstatt dass das Diagramm ohne definierte Reihen vorhanden ist.

Das "verlorene" Diagramm scheint zu geschehen, wenn konsekutive Ausführungen des Basiscodes über einen anderen Abschnitt des VBA-Codes ausgeführt werden, der automatisch eine Reihe von Diagrammen erstellt und sie nach PowerPoint kopiert.

Wenn die Sequenz von Diagrammen manuell ausgeführt wird, funktioniert es ohne Probleme. Wenn das Diagramm automatisch ausgeführt wird, wird es bei der Erzeugung der zweiten Chateinfolge gelöscht.

Ich hoffe, dass jemand mit den Änderungen in der Charting von Excel 2007 zu 2010 Version vertraut ist und in der Lage sein wird, zu helfen.

VieLen Dank,

Len

3
Können Sie bestätigen, dass die Diagramme tatsächlich gelöscht werden, oder ist es möglich, dass das Diagramm nur unsichtbar wird? Verringert sich die Länge der ChartObjects-Auflistung für das aktuelle Blatt? Bei der Aktualisierung vorhandener Arbeitsmappen mit Diagrammbearbeitungscode von Excel 2003 auf Excel 2007 haben wir festgestellt, dass unser Code gelegentlich dazu führen würde, dass die Diagramme nicht mehr angezeigt werden, aber sie waren immer noch im Hintergrund vorhanden. Wenn sie noch da sind, mag das komisch klingen, aber wenn Sie in die Systemsteuerung gehen und den Dienst "Druckerspooler" starten und starten, können sie wieder erscheinen.
hinzugefügt der Autor Michael Kingsmill, Quelle
Wir fanden die beste Lösung für dieses Problem darin, Code zu schreiben, der alle Diagramme von Grund auf neu erstellte und als neue 2010-Diagramme neu erstellte, um jegliche latente "Korruption" aus der Excel 2003-Version zu entfernen.
hinzugefügt der Autor Michael Kingsmill, Quelle
Michael, Danke. Ich werde hoffentlich nächste Woche etwas Zeit haben, um darauf zurückzukommen. Wenn das Diagrammobjekt während der Makroaufzeichnung mit 2010 angezeigt wird, kann ich genau das tun und das gesamte Diagramm löschen und jedes Mal neu erstellen, um die volle Kontrolle zu haben. Ich wollte dies ursprünglich bei der Migration auf die Version 2007 tun, aber das Diagrammobjekt wurde geändert, und da das Objektmodell in der Makroaufzeichnung nicht verfügbar war, war es ein bisschen zu viel, um abzubeißen. Ich werde ein Update veröffentlichen, wenn ich damit irgendwo hinkomme.
hinzugefügt der Autor NitroLen, Quelle

2 Antworten

Es könnte helfen, deinen Code zu überarbeiten, so dass du nicht aktivierst/auswählst und dann abhängig davon, dass das "aktive" Objekt sich nicht ändert: das kann brechen, wenn ein anderer Code ein anderes Objekt aktiviert, wenn du es nicht erwartest ...

Dim cht As Chart

Set cht = ActiveWorkbook.Sheets(sChartSheet).ChartObjects("Chart 15").Chart
Do While cht.SeriesCollection.Count > 0
    cht.SeriesCollection(1).Delete
Loop

With cht.SeriesCollection
    .NewSeries
    With .Item(1)
        .Values = "=HistogramData!$B$5:$B$29"
        .XValues = "=HistogramData!$A$5:$A$29"
        .ChartType = xlColumnClustered
    End With
End With
2
hinzugefügt
Dies ist sicherlich ein besseres Design. Wenn Sie beispielsweise Diagramme auf ausgeblendeten Tabellen auswählen, wird eine Laufzeitausnahme ausgelöst. Daher sollten Sie niemals Arbeitsblattobjekte auswählen. Wenn Sie die Bildschirmaktualisierung nicht ausschalten, hilft dies außerdem, den Bildschirm vor zu starkem Flimmern zu schützen. Dies wird jedoch nicht viel zur Lösung Ihres Problems beitragen.
hinzugefügt der Autor Michael Kingsmill, Quelle
Eine gute Best Practice. Ich werde das machen. Ich versuche zu minimieren, direkt mit ausgewählten Objekten zu arbeiten, aber es funktionierte, die Bildschirmaktualisierung war ausgeschaltet, also weiter zu anderen Aufgaben!
hinzugefügt der Autor NitroLen, Quelle

Ich habe alle Interaktionen mit dem Diagramm neu formatiert, um das "mit" anstatt das Auswählen zu verwenden. Seine bessere Programmierung.

Leider hat das das Problem nicht gelöst.

Die Kommentare zum Druckspooler waren hilfreich und es scheint, dass das Problem mit der Interaktion mit der Darstellung von Diagrammen auf dem Bildschirm und dem Drucker zusammenhängt.

Referenz

Da viele andere Benutzer in meiner Organisation über verschiedene Drucker verfügen und beim Versuch, die MS Office-Druckertreiber als Standard zu verwenden, die Wiederherstellung nicht verbessert wurde, musste eine andere Lösung gefunden werden.

Das Problem trat bei der Verwendung von VBA-Code zum Kopieren von Arbeitsblattelementen in PowerPoint auf. Kopieren als Drucker, Bitmatte mit:

rSlideArea.CopyPicture (2)  

Zum Kopieren als Bildschirm-Bitmap geändert mit:

rSlideArea.CopyPicture Appearance:=xlScreen, Format:=xlBitmap

Interessant resultierende PowerPoint-Dateien mit Bitmap-Formatierung ließen sich leichter bearbeiten und waren kleiner.

Das Ergebnis ist, dass die Bilder in PowerPoint mit der Bildschirmformatierung nicht so "hübsch" sind, aber die Anwendung funktioniert jetzt in Excel v2010, was die unmittelbare Priorität war.

Danke an alle die geholfen haben.

0
hinzugefügt