PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerExcelExcelManipulera en diagramserie med VBAManipulera en diagramserie med VBA
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2021-12-15 14:27
 
 Ändrad av Nordstjärna  på 2021-12-15 14:29:00

 Jag har ett stapeldiagram som när man klickar på en stapel så kommer följande fram i rutan där man annars skriver formler

=SERIE(;'tabell 1'!$N$64:$N$65;'tabell 1'!$O$64:$O$65;1). Det första argumentet styr rubriken och är här utlämnat. Det andra pekar på det cellområde där texten till staplarnas innehåll (X-axeln). Det tredje är de celler som ligger till grund för staplarnas höjd.

Problemet jag har är att jag vill skapa ett diagram där jag olika antal staplar varje gång dvs i området !$N$64:$N$65 resp O$64:$O$65;1 vill jag kunna variera den sista cellens adress beroende på antal poster. Antalet poster som ska visas räknas fram i programmet. Diagrammets design i övrigt är fast det är bara antalet staplar (med etiketter) som varierar.

Nytt inlägg
 2021-12-16 09:55
 

Jag sitter och stirrar på en kod jag skrev för X år sen. Tyvärr är den helt okommenterad ...

Först verkar jag skapa diverse områden (det du var klar med). Sen lopade jag igenom ett par diagram  (därav activechart, du kan nog adressera rätt diagram direkt)

Själva "ompekningen" gjorde jag (förenklat) så här

ActiveChart.SetSourceData Source:=rRubrikOchDataområdet, PlotBy:=xlRows

 
Det här är alltså motsvarigheten till att gå in i 
Diagramdesign->Data->markera Data: 
och ändra hela diagramdataområdet. Dvs så man brukar gör amanuellt
 
Ähh, kolla dokumentationen för "setsourcedata". Du kan säkert göra någonting som passar dig mycket bättre:
https://docs.microsoft.com/en-us/office/vba/api/excel.chart.setsourcedata
Nytt inlägg
 2021-12-16 10:39
 

 Activechart krävs att diagrammet är aktiverat. Du kommer åt ditt diagram med worksheets(1).charts(1) eller worksheets(1).chartobjects(1) beroende på vilken typ av diagram du har, ändra bara siffrorna så de stämmer med indexering av dina blad. Har du bara ett diagram så behöver du inte ändra din etta. Annars får du loopa dina diagram för att se vilket index som diagrammet du vill påverka har, alternativt använda dess namn.

Mvh

Christian

Nytt inlägg
 2021-12-16 14:33
 
 Ändrad av Nordstjärna  på 2021-12-16 14:34:36

 Det jag vill åstadkomma är att ange namngivna områden för X-axeln och staplarnas höjd. På så sätt kan jag beroende på antal staplar ändra det namngivna områdets omfattning. Jag har försökt med följande:

ActiveSheet.ChartObjects("Diagram 1").Activate

    ActiveChart.FullSeriesCollection(1).Select

    Selection.Formula = _

       "=SERIES(,Blad1!kategori,Blad1!data,1)"

 där kategori och data är namngivna områden men då blir svaret: 

 

Nytt inlägg
 2021-12-17 09:32
 

Hej hej

i nedan kod så är rngdata och rngdata 2, områden med stapelhöjder. rngkat, rngkat2 är staplarnas namn. 

Notera att varje område endast mostsvarar en stapel, så om du har ganska många staplar så blir det drygt att sätta allt statiskt. Då är det bättre att loopa dina namnginvaområden och sätta staplarna dynamiskt istället. Detta borde gå att göra om du namnger dina dataområden och stapelnamn på smart sätt. Annars:

Option Explicit

 
Sub fixChart()
 
    Dim ws As Worksheet: Set ws = ActiveSheet
    Dim rngData As Range: Set rngData = ws.Range("rngHeight")
    Dim rngHeader As Range: Set rngHeader = ws.Range("rngKat")
    Dim rngData2 As Range: Set rngData2 = ws.Range("rngdata2")
    Dim rngHeader2 As Range: Set rngHeader2 = ws.Range("rngKat2")
 
    ws.ChartObjects(1).Activate
    ActiveChart.SeriesCollection(1).Values = rngData
    ActiveChart.SeriesCollection(1).Name = rngHeader
    ActiveChart.SeriesCollection(2).Values = rngData2
    ActiveChart.SeriesCollection(2).Name = rngHeader2    
 
End Sub

 

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerExcelExcelManipulera en diagramserie med VBAManipulera en diagramserie med VBA

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter