14. august 2007 - 20:05Der er
9 kommentarer og 1 løsning
Graf: slet label hvis værdi er = 0
jeg har en graf (stacked bar i sit 'eget' sheet - dvs ikke indlejret i et andet ark) med 30-40 forskellige serier.
Jeg har brug for at vise labels i grafen, men kun for de værdier hvor der er data. Det er muligt at gøre dette manuelt, men det er meget omstændigt og grafen opdateres ofte.
Jeg har brug for et lille stykke vba som kan løbe gennem alle serierne i en graf (antallet svinger) og checke hvert eneste datapunkt. Hvis værdien for datapunktet er = 0 skal lablen slettes, ellers ikke.
Jeg går ud fra at du henter labels fra dit ark? I så fald er det vel lettest at styre med en formel i Excel. Noget á la Hvis(A2=0;"";A1) Eller lignende.
Sub FjerLabelHvisVærdi() Dim x As Byte ' Antal Serier i graf Dim y As Byte ' Antal datapunkter i serie (point) Dim i As Byte ' tæller Dim z As Byte ' tæller
x = ActiveChart.SeriesCollection.Count
For i = 1 To x y = ActiveChart.SeriesCollection(i).Points.Count For z = 1 To y If ActiveChart.SeriesCollection(i).Points(z).Value = 0 Then ActiveChart.SeriesCollection(i).Points(z).Label.Visible = False End If Next z Next i End Sub
Det køre helt fint indtil:
If ActiveChart.SeriesCollection(i).Points(z).Value = 0 Then ActiveChart.SeriesCollection(i).Points(z).Label.Visible = False
Det er disse to linier som jeg ikke kan hitte ud af (syntax mv). Jeg aner faktisk ikke om man overhoved kan skrive noget med:
problemet er ikke længere at fjerne/sætte label på det enkelte datapoint, men at finde værdien af datapoint xx i seriescollection yy for at bestemme om labelen skal væk eller ej.
Jeg har kigget en del i hjælp mv, men jeg kan sgu ikke finde svaret..
Så tror jeg det lykkes, løsningen ser således ud (det kan sikkert gøres smukkere..) For Each Se In ActiveChart.SeriesCollection With Se SerieNavn = .Name Vær = .Formula x = Split(Vær, ",") Vær = x(2) For Counter = 1 To Range(Vær).Cells.Count PointVærdi = Range(Vær).Cells(1, Counter).Offset(0, 0).Value LabelVærdi = Range(Vær).Cells(1, 1).Offset(0, -1).Value If PointVærdi <> 0 Then ActiveChart.SeriesCollection(SerieNavn).Points(Counter).HasDataLabel = True ActiveChart.SeriesCollection(SerieNavn).Points(Counter).DataLabel.Text = LabelVærdi End If Next Counter End With Next
Cool, det skal nok kunne bruges en dag. Hvis bare man bliver ved længe nok :o)
Synes godt om
Ny brugerNybegynder
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.