Excel 2010 VBA verwijdert diagram

Ik steun een Excel VBA-toepassing in mijn vrije tijd. Ik ben productieprocesengineer, geen professionele ontwikkelaar.

De diagramgedeelten van de applicatie hebben zonder probleem gewerkt in Excel 2007. Mijn bedrijf is bezig met upgraden naar Excel 2010 en diezelfde applicatie heeft nu problemen met de interactie met de grafieken op werkbladen.

Het probleem zit in een staafdiagram. De toepassing verwijdert bij het opnieuw instelLen de reeks uit de grafiek met behulp van de onderstaande code. Ik heb dit gedaan zodat terwijl er nieuwe gegevens worden geïmporteerd/verwerkt, er geen tijd is waarin een diagram wordt gepresenteerd aan de gebruiker dat niet up-to-date is met de nieuwste gegevens.

        '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

maakt vervolgens nieuwe reeksen als nieuwe gegevens die moeten worden weergegeven, worden geïmporteerd uit een extern gegevensbestand:

    '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

Het probleem met 2010 is dat af en toe wanneer de VBA-code wordt uitgevoerd, het volledige staafdiagram 'verloren' (verwijderd) is in plaats van dat het diagram aanwezig is zonder gedefinieerde reeksen.

Het 'verloren' diagram lijkt te gebeuren wanneer opeenvolgende uitvoeringen van de basiscode worden uitgevoerd via een andere sectie van VBA-code die automatisch een reeks diagrammen maakt en deze naar PowerPoint kopieert.

Wanneer de reeks diagrammen handmatig wordt uitgevoerd, werkt deze zonder probleem. Wanneer het automatisch wordt uitgevoerd, wordt bij het genereren van de tweede chatenreeks het diagram verwijderd.

Ik hoop dat iemand bekend is met de wijzigingen in de grafieken van versie Excel 2007 tot 2010 en kan helpen.

Bedankt,

Len

3
Kunt u bevestigen dat de diagrammen daadwerkelijk worden verwijderd, of is het mogelijk dat het diagram gewoon onzichtbaar wordt? Is de lengte van de ChartObjects-verzameling voor het huidige blad eigenlijk minder? Toen we bestaande werkmappen met grafiekmanipulatiecode van Excel 2003 naar Excel 2007 upgraden, ontdekten we dat onze code er op het occidente moment voor zorgde dat de diagrammen uit het zicht verdwenen, maar ze waren er nog steeds op de achtergrond. Als ze er nog steeds zijn, klinkt dit misschien vreemd, maar als u naar het Configuratiescherm gaat en stopt en vervolgens de service met de naam "Print Spooler" start, kunnen ze opnieuw verschijnen.
toegevoegd de auteur Michael Kingsmill, de bron
We hebben vastgesteld dat de beste oplossing voor dit probleem was het schrijven van code die alle diagrammen van nul afnam en opnieuw maakte als nieuwe 2010-diagrammen om latente "corruptie" uit de Excel 2003-versie te verwijderen.
toegevoegd de auteur Michael Kingsmill, de bron
Michael, bedankt. Ik zal hopelijk enige tijd hebben volgende week om hierop terug te komen. Aangezien het diagramobject tijdens de macro-opname in 2010 wordt weergegeven, kan ik dat doen en de hele kaart verwijderen en elke keer opnieuw opnieuw maken om volledige controle te hebben. Dat wilde ik in eerste instantie doen toen ik naar de versie van 2007 migreerde, maar het grafiekobject veranderde en met het objectmodel niet zichtbaar in de macro-opname was het een beetje te veel om af te bijten. Ik plaats een update als ik ergens mee kom.
toegevoegd de auteur NitroLen, de bron

2 antwoord

Het kan helpen om je code opnieuw te bewerken, zodat je niet activeert/selecteert en vervolgens afhankelijk bent van het feit dat het "actieve" object niet verandert: dat kan breken als een andere code een ander object activeert als je het niet verwacht ...

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
toegevoegd
Dit is zeker een beter ontwerp. Als u diagrammen op verborgen bladen selecteert, krijgt u bijvoorbeeld een runtime-uitzondering, dus het is het beste om nooit werkbladobjecten te selecteren. Bovendien, zonder het updaten van het scherm uit te schakelen, zal dit u helpen om te voorkomen dat het scherm te veel flitst. Dit gaat echter niet veel doen om uw probleem op te lossen.
toegevoegd de auteur Michael Kingsmill, de bron
Een goede best practice. Ik zal dat doen. Ik probeer te minimaliseren direct werken met geselecteerde objecten, maar het werkte, scherm bijwerken was uitgeschakeld dus verplaatst naar andere taken!
toegevoegd de auteur NitroLen, de bron

Ik heb alle interacties met de grafiek opnieuw ingesteld om 'met' te gebruiken in plaats van te selecteren. Het is beter programmeren.

Helaas loste dit het probleem niet op.

De opmerkingen met betrekking tot de Print Spooler waren nuttig en het lijkt erop dat het probleem te maken heeft met de interactie met hoe diagrammen op het scherm en de printer verschijnen.

Referentie

Omdat veel andere gebruikers binnen mijn organisatie verschillende printers hebben en bij het uitproberen van de MS Office-printerdrivers niet de restuls verbeterden, moest er een andere oplossing worden gevonden.

Het probleem ontstond bij het gebruik van VBA-code om werkbladverwijzingen naar PowerPoint te kopiëren. Kopieerde als printer, bitmat met:

rSlideArea.CopyPicture (2)  

Gewijzigd om te kopiëren als schermbitmap met behulp van:

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

Interessant is dat PowerPoint-bestanden met bitmap-opmaak gemakkelijker waren om mee te werken en kleiner waren.

Het resultaat is dat de afbeeldingen in PowerPoint niet zo 'mooi' zijn met schermopmaak, maar de toepassing werkt nu in Excel v2010, wat de onmiddellijke prioriteit was.

Dank aan iedereen die heeft geholpen.

0
toegevoegd