Avatar billede brilleabe Nybegynder
28. august 2004 - 10:20 Der 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?

Lidt forvirende, men jeg håber i forstår.
Avatar billede sjap Praktikant
28. august 2004 - 11:12 #1
Nedenstående kode viser kun hver anden labe.

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
Avatar billede brilleabe Nybegynder
28. august 2004 - 12:28 #2
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)
Avatar billede sjap Praktikant
28. august 2004 - 14:32 #3
Prøv med

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
Avatar billede sjap Praktikant
28. august 2004 - 14:36 #4
Nåh ja den kunne jo lige trimmes lidt

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
Avatar billede brilleabe Nybegynder
29. august 2004 - 20:56 #5
Det ser godt ud. Lige bortset fra at den sætter katagori aksens etiketter ind i stedet for..
Avatar billede sjap Praktikant
29. august 2004 - 20:59 #6
Du erstatter blot
  xlDataLabelsShowLabel
med
  xlDataLabelsShowValue
Avatar billede brilleabe Nybegynder
29. august 2004 - 21:03 #7
Det funker bare ! (Har du et bud  på hvordan jeg 'tænder' for dem igen og hvordan jeg kan nøjes med at vise f.eks hver 10 label ?)
Avatar billede sjap Praktikant
29. august 2004 - 21:14 #8
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
Avatar billede sjap Praktikant
29. august 2004 - 21:17 #9
Din funktion skal altså nu se således ud

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
Avatar billede brilleabe Nybegynder
29. august 2004 - 21:24 #10
super, tester lige.
Avatar billede sjap Praktikant
29. august 2004 - 21:25 #11
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
Avatar billede brilleabe Nybegynder
29. august 2004 - 21:26 #12
YES, det var lige det jeg var ved at skrive om...
tester igen..
Avatar billede sjap Praktikant
29. august 2004 - 21:28 #13
Håber ikke du bliver alt for forvirret, når jeg glemmer at ændre "Ark1" til "Sheet1" og "Diagram 1" til "Chart 5".
Avatar billede brilleabe Nybegynder
29. august 2004 - 21:30 #14
næ, det er helt ok, men nu kan jeg sgu' ikke slukke igen efter jeg har kørt 'tænderen'?
Avatar billede sjap Praktikant
29. august 2004 - 21:33 #15
Det fungerer fint her. Er du sikker på du bruger den rigtige funktion?
Avatar billede brilleabe Nybegynder
29. august 2004 - 21:34 #16
Ups, det er mig som fumler. Det virker bare kanon. Point på vej! tak for hjælpen - det var lige det jeg manglede.
Avatar billede sjap Praktikant
29. august 2004 - 21:35 #17
Jamen det var da en fornøjelse. Det er jo sjovest når det virker - det er dog sjovere når en flok piger vinder OL!
Avatar billede brilleabe Nybegynder
29. august 2004 - 21:45 #18
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)
Avatar billede sjap Praktikant
29. august 2004 - 21:55 #19
Nej det kan jeg ikke lige forstå. Det burde da ikke være noget problem.
Avatar billede sjap Praktikant
29. august 2004 - 21:57 #20
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.
Avatar billede brilleabe Nybegynder
29. august 2004 - 22:00 #21
Jeg havde en lille rutine til at bytte om på serierne, så den har jeg brugt således at jeg bytter om på serierne - og køre SlukAlleLabels igen.

Det funker bare ikke når jeg bruger stacked area - hmm meget mærkeligt. Jeg på vist prøve at gå i tænkeboks, men tak for hjælpen.
Avatar billede sjap Praktikant
29. august 2004 - 22:07 #22
OK :0)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester