Trädvy Permalänk
Medlem
Plats
Västerås
Registrerad
Dec 2013

VBA Excel, enkelt problem

Hej Swec,
Känns lite pinsamt att ställa frågan i Programmering och Digitalt Skapande, men det är nog det närmaste jag kan komma i dagsläget.
Jag ska skriva ut en stor mängd grafer och tänkte att det nog är bättre att skapa dem med VBA, men jag får det tyvärr inte riktigt att fungera. Jag har prövat att spela in lite kodsnuttar, men eftersom att jag vill göra en stor mängd grafer så fungerar det inte riktigt.

Kod i Spoiler.

Sub Grafer()
Worksheets("Uppföljning ISK").ChartObjects.Delete
Dim i As Integer
Dim j As Integer
For i = 1 To 5
For j = 2 To 6
m = j + (i - 1) * 5
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceData Source:=Sheets("Uppföljning ISK").Range(Cells(10, m), Cells(20, m)), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Uppföljning ISK"
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Text = Cells(9, j)
ActiveChart.Legend.Select
Selection.Format.TextFrame2.TextRange.Font.Size = 6
ActiveChart.Parent.Height = 250
ActiveChart.Parent.Width = 240
ActiveChart.Parent.Top = 50 + 275 * (j - 1)
ActiveChart.Parent.Left = -100 + 240 * i
Next j
Next i

Dold text

Denna kodsnutt fungerar, men jag skulle vilja lägga till ett låst intervall till graferna. Dvs, jag skulle vilja ha med [Cells(10,1), Cells(20,1)] i intervallet ovan, men jag får det inte att fungera. Jag har då testat att köra:

ActiveChart.SetSourceData Source:=Sheets("Uppföljning ISK").Range(Union(Cells(10,1), Cells(20,1),Cells(10, m), Cells(20, m))), PlotBy:=xlColumns

Men det fungerar inte, hur gör jag för att det ska fungera?
Jag har googlat en hel del men tyvärr inte kommit något längre. Inte helt hemma med detta :-).

//Mvh Martin

Trädvy Permalänk
Medlem
Registrerad
Aug 2014

Om rangen du skapar med union är oregelbunden så tror jag vba kan ha svårt att skapa en tabell/graf utifrån den, då data saknas för att plotta alla värden... men jag kan ha fel sitter inte framför excel nu för att testa.

Definera referensen till din fasta range innan For looparna för att spara tid och för tydlighet.

dim shISK As WorkSheet
set shISK = Worksheets("Uppföljning ISK")

dim rgISK As Range
set rgISK = shISK.Range(Cells(10,1), Cells(20,1))

...
ActiveChart.SetSourceData Source:=Union(rgISK,Range(Cells(10, m), Cells(20, m))), PlotBy:=xlColumns

Z170-WS | Intel 6700K | Dominator 2x16GB 3000MHz | Samsung 950 Pro 2x512GB NVMe RAID0 | MSI 1080 Gaming X | Seasonic 520 Fanless | 7260 HMV-AC | Fractal Design Define R4 | Noctua NH-U12S@475RPM | Noctua P12@475RPM x5
Supermicro X10SLL-F | Supermicro 1U SC813MT-300C | XEON E3 1231v3 | Hynix 4x8GB ECC | 840 EVO | WD 6x 4TB RE
x220 | IPS | i7 | SSD | 9-cell

Trädvy Permalänk
Medlem
Plats
Västerås
Registrerad
Dec 2013
Skrivet av ggwp:

Om rangen du skapar med union är oregelbunden så tror jag vba kan ha svårt att skapa en tabell/graf utifrån den, då data saknas för att plotta alla värden... men jag kan ha fel sitter inte framför excel nu för att testa.

Definera referensen till din fasta range innan For looparna för att spara tid och för tydlighet.

dim shISK As WorkSheet
set shISK = Worksheets("Uppföljning ISK")

dim rgISK As Range
set rgISK = shISK.Range(Cells(10,1), Cells(20,1))

...
ActiveChart.SetSourceData Source:=Union(rgISK,Range(Cells(10, m), Cells(20, m))), PlotBy:=xlColumns

Tackar, detta fungerade utmärkt.
Jag hade alltså fel syntax på Union, men sedan löste jag det genom att lägga till rad nummer 2:
ActiveChart.SeriesCollection(1).XValues = Range(Cells(10, 1), Cells(20, 1))
ActiveChart.SetSourceData Source:=Sheets("Uppföljning ISK").Range(Cells(10, m), Cells(20, m)), PlotBy:=xlColumns

Men ditt sätt att lösa det var snyggare och bättre, så det anammar jag till framtiden.

Tack så mycket för hjälpen :-).

Trädvy Permalänk
Medlem
Registrerad
Aug 2014

vsg!

Nu när jag tittar på det så är det nog god vba form att namnge den fasta rangen i excel och sedan referera till namnet från vba, istället för cellernas rad och kolumnnummer.

kul att du löste det!

Skickades från m.sweclockers.com

Z170-WS | Intel 6700K | Dominator 2x16GB 3000MHz | Samsung 950 Pro 2x512GB NVMe RAID0 | MSI 1080 Gaming X | Seasonic 520 Fanless | 7260 HMV-AC | Fractal Design Define R4 | Noctua NH-U12S@475RPM | Noctua P12@475RPM x5
Supermicro X10SLL-F | Supermicro 1U SC813MT-300C | XEON E3 1231v3 | Hynix 4x8GB ECC | 840 EVO | WD 6x 4TB RE
x220 | IPS | i7 | SSD | 9-cell