Plotorder van een Chart wijzigen.

Status
Niet open voor verdere reacties.

MDN111

Gebruiker
Lid geworden
13 aug 2007
Berichten
503
Hallo !

Onderstaande code is een Sub om de Plotorder in een Chart te wijzigen. Niets spectaculairs, maar er is iets wat ik niet begrijp.

Onderstaande code werkt:

Code:
Private Const Sheet_Name = "Pivot Kostensoort"
Private Const ChartObject_Name = "Chart 2"

Sub ArrangeChart(ByVal SerieName As String)
Dim myChart As Chart

With ThisWorkbook.Sheets(Sheet_Name)

    [COLOR="#FF0000"]Set myChart = .ChartObjects(ChartObject_Name).Chart
    myChart.SeriesCollection(SerieName).PlotOrder = 1[/COLOR]

End With

End Sub

Maar de volgende code werkt niet. Resultaat = Run-time error 13 (Type mismatch).

Code:
Private Const Sheet_Name = "Pivot Kostensoort"
Private Const ChartObject_Name = "Chart 2"

Sub ArrangeChart(ByVal SerieName As String)

With ThisWorkbook.Sheets(Sheet_Name)

    [COLOR="#FF0000"].ChartObjects(ChartObject_Name).Chart.SeriesCollection(SerieName).PlotOrder = 1[/COLOR]

End With

End Sub

Blijkbaar heeft het iets te maken met de manier waarop naar de SeriesCollection wordt verwezen. Als ik het met een letterlijke string doe, dan is er geen probleem. Zie eerste lijn van het Immediate Window in bijlage. Doe ik het via de constante, dan loopt het fout. Zie laatste lijn van bijgevoegde screenshot.

Heeft er iemand een idee?

Grtz,
MDN111.
 

Bijlagen

  • Screenshot.png
    Screenshot.png
    17,8 KB · Weergaven: 22
Laatst bewerkt:
Wijzig ByVal eens in ByRef of laat deze achterwege.
 
De parameter doorgeven ByRef geeft dezelfde foutmelding. Ook doorgeven As String of As Variant werkt niet. Ik heb nochtans wel een oplossing gevonden in deze link:

https://stackoverflow.com/questions/13363284/how-to-find-the-series-name-using-vba

Onderstaande code werkt dus wel en het maakt niet uit of de functie CVar() of Cstr() gebruikt wordt (?).

Code:
Private Const Sheet_Name = "Pivot Kostensoort"
Private Const ChartObject_Name = "Chart 2"

Sub ArrangeChart(ByVal SerieName As String)

With ThisWorkbook.Sheets(Sheet_Name)

    [COLOR="#0000CD"].ChartObjects(ChartObject_Name).Chart.SeriesCollection([/COLOR][COLOR="#FF0000"][B]CStr([/B][/COLOR][COLOR="#0000CD"]SerieName[/COLOR][COLOR="#0000CD"][COLOR="#FF0000"][B])[/B][/COLOR].PlotOrder = 1[/COLOR]

End With

End Sub

Alhoewel het niet echt een probleem was (het werkt wel met een Chart-object) is het nu opgelost. Het vervelende is dat ik niet goed begrijp wat er zich afspeelt. Het is toch vrij bizar om een String om zetten naar een String (???). :confused:
 
Dat lijkt vreemd, maar SeriesCollection verwacht standaard een indexnummer (Integer) als parameter.
Wellicht dat dat de oorzaak is.
 
Oei, dat is niet wat ik lees. Volgens MSDN verwacht de SeriesCollection een Variant als Index. In de beschrijving staat: "The name or number of the series.".

Maar goed, het is niet echt een groot probleem, alleen redelijk bizar. Ik ga de vraag als opgeslost zetten. Hier heb ik nog iemand gevonden die er last van heeft (of had...).

Nog een prettig eindejaar...:thumb:

Grtz,
MDN111.
 
Een variant zou het datatype aan moeten nemen van de data die hij krijgt.
Lijkt dus kennelijk niet helemaal goed te gaan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan