28. august 2004 - 10:20Der er
20 kommentarer og 2 løsninger
makro til at lave mellemrum mellem data-labels i en graf
Jeg har en graf med mange datasæt. Derfor er data labelsne svære at læse. Er det muligt at lave en makro som 'springer over' nogle af lebelesne - ligesom katagoriaksen gør automatisk?
Sub VisLabels() Dim I As Integer Dim Punkt As Object I = 0 For Each Punkt In Sheets("Diagram3").SeriesCollection(1).Points I = I + 1 If I Mod 2 = 0 Then Punkt.ApplyDataLabels Type:=xlDataLabelsShowNone, AutoText:=True, LegendKey:=False Else Punkt.ApplyDataLabels Type:=xlDataLabelsShowLabel, AutoText:=True, LegendKey:=False End If Next End Sub
Den giver en 'runtime error' 9 ved denne linie: For Each Punkt In Sheets("Chart 5").SeriesCollection(1).Points - det er fordi jeg har min graf (chart 5) i "Sheet1". kan det lade sig gøre eller skal grafen være i sit eget ark? Og hvad nu hvis man kun vil se f.eks hver 24 data label? (ps, jeg har prøvet at sætte grafen i sit eget ark - og det virker)
Sub VisLabels2() Dim I As Integer Dim Punkt As Object I = 0 Sheets("Sheet1").Select ActiveSheet.ChartObjects("Chart 5").Activate For Each Punkt In ActiveChart.SeriesCollection(1).Points I = I + 1 If I Mod 2 = 0 Then Punkt.ApplyDataLabels Type:=xlDataLabelsShowNone, AutoText:=True, LegendKey:=False Else Punkt.ApplyDataLabels Type:=xlDataLabelsShowLabel, AutoText:=True, LegendKey:=False End If Next End Sub
Sub VisLabels2() Dim I As Integer Dim Punkt As Object I = 0 For Each Punkt In Worksheets("Ark1").ChartObjects("Diagram 1").Chart.SeriesCollection(1).Points I = I + 1 If I Mod 2 = 0 Then Punkt.ApplyDataLabels Type:=xlDataLabelsShowNone, AutoText:=True, LegendKey:=False Else Punkt.ApplyDataLabels Type:=xlDataLabelsShowLabel, AutoText:=True, LegendKey:=False End If Next End Sub
Det lille nummer klarer du med xlDataLabelsShowLabel mens det er xlDataLabelsShowNone der "slukker" for dem.
For kun at tænde hver 10. label skal du lige ændre if-sætningen til følgende:
If I Mod 10 = 0 Then Punkt.ApplyDataLabels Type:=xlDataLabelsShowLabel, AutoText:=True, LegendKey:=False Else Punkt.ApplyDataLabels Type:=xlDataLabelsShowNone, AutoText:=True, LegendKey:=False End If
Sub VisLabels10() Dim I As Integer Dim Punkt As Object I = 0 For Each Punkt In Worksheets("Sheet1").ChartObjects("Chart 5").Chart.SeriesCollection(1).Points I = I + 1 If I Mod 10 = 0 Then Punkt.ApplyDataLabels Type:=xlDataLabelsShowValue, AutoText:=True, LegendKey:=False Else Punkt.ApplyDataLabels Type:=xlDataLabelsShowNone, AutoText:=True, LegendKey:=False End If Next End Sub
Og så kunne du måske også have glæde af følgende funktioner til henholdsvis at vise og slukke alle labels:
Sub VisAlleLabels() Worksheets("Ark1").ChartObjects("Diagram 1").Chart.SeriesCollection(1).ApplyDataLabels Type:=xlDataLabelsShowValue, AutoText:=True, LegendKey:=False End Sub
Sub SlukAlleLabels() Worksheets("Ark1").ChartObjects("Diagram 1").Chart.SeriesCollection(1).ApplyDataLabels Type:=xlDataLabelsShowNone, AutoText:=True, LegendKey:=False End Sub
Det er jo lige det det er! Har du et bud på hvorfor det virker som det skal når jeg bruger stacked bar diagram, men ikke når jeg bruger stacked area? (VisAlleLabels virker ok, men jeg kan ikke slukke)
Hmmm. Du skriver STACKED - så har du vel også flere serier?! I de ovenstående makroer er der kun taget højde for én dataserie. Det gøres med udtrykket SeriesCollection(1) Hvis du skal have fat i andre serier, skal du ændre nummeret.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.