Avatar billede rune_a Nybegynder
04. november 2003 - 00:00 Der er 7 kommentarer og
1 løsning

hvordan laver jeg en makro der tegner en graf?

Er der ikke en der kan fortælle mig hvordan jeg kan lave en makro der tegner en graf, der bruger de data som jeg har markeret.

Hvis jeg indspiller en makro hvor jeg tegner en graf, er det den samme graf der bliver tegnet når jeg afspiller makroen. Uanset hvilke celler der er markeret, når jeg afspiller makroen.

På forhånd tak
Rune
Avatar billede tfa_dk Nybegynder
04. november 2003 - 00:04 #1
Det er fordi makroen også optager det område du markere. Du skal rette i koden for at få det til at virke.
Avatar billede rune_a Nybegynder
04. november 2003 - 00:10 #2
Ja men hvordan gør jeg det? Koden ser således ud:
Charts.Add
    ActiveChart.ChartType = xlSurfaceTopView
    ActiveChart.SetSourceData Source:=Sheets("DR").Range("M49:S54")
    ActiveChart.Location Where:=xlLocationAsObject, Name:="DR"
    ActiveSheet.Shapes("Diagram 7").IncrementLeft 99#
    ActiveSheet.Shapes("Diagram 7").IncrementTop 96.75
End Sub

Jeg går ud fra at det er i SetSourceData der skal rettes et eller andet. Evt. noget med selection, men jeg kan ikke få det til at virke!
Avatar billede tfa_dk Nybegynder
04. november 2003 - 00:11 #3
Her er et regneark med navne og alder og en makro jeg har optaget der 'tegner' et søjlediagram

navn    alder
Ole     12
Peter    10
Bo    17
Hans    8



Sub Makro1()
'
' Makro1 Makro
' Makro indspillet 04-11-2003 af OEM
'

'
    Range("A1:B5").Select    Charts.Add
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Sheets("Ark1").Range("A1:B5"),  ' HER GÅR DET GALT HVIS DU FLYTTER DATA!
    PlotBy:= _
        xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Ark1"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "alder"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
End Sub


Du skal udskifte denne del af koden: "A1:B5"
Du kan evt. bruge et navngivent område hvis det er for at fastholde grafen når det kommer flere data i stedet for at køre makroen hver gang.
Avatar billede bak Forsker
04. november 2003 - 00:20 #4
eller

Sub test3()
Dim sdata As Range
Set sdata = Selection
Charts.Add
    ActiveChart.ChartType = xlSurfaceTopView
    ActiveChart.SetSourceData Source:=sdata
    ActiveChart.Location Where:=xlLocationAsObject, Name:="DR"
    ActiveSheet.Shapes(1).IncrementLeft 99#
    ActiveSheet.Shapes(1).IncrementTop 96.75
End Sub
Avatar billede tfa_dk Nybegynder
04. november 2003 - 00:28 #5
Set sData = ActiveWindow.RangeSelection

Selection kan indeholde knapper, grafer, m.m.
Avatar billede rune_a Nybegynder
04. november 2003 - 01:10 #6
Tak for det! Det ser ud til at virke!!

Hvad gør jeg hvis jeg gerne vil navngive serierne? Altså hvordan udskifter jeg
XValues = "=DR....." med referencer til cellerne i den første kolonne der er markeret?

    ActiveChart.SeriesCollection(1).XValues = "=DR!R55C23:R55C29"
    ActiveChart.SeriesCollection(1).Name = "=DR!R49C22"
    ActiveChart.SeriesCollection(2).XValues = "=DR!R55C23:R55C29"
    ActiveChart.SeriesCollection(2).Name = "=DR!R50C22"
    ActiveChart.SeriesCollection(3).XValues = "=DR!R55C23:R55C29"
    ActiveChart.SeriesCollection(3).Name = "=DR!R51C22"
    ActiveChart.SeriesCollection(4).XValues = "=DR!R55C23:R55C29"
    ActiveChart.SeriesCollection(4).Name = "=DR!R52C22"
    ActiveChart.SeriesCollection(5).XValues = "=DR!R55C23:R55C29"
    ActiveChart.SeriesCollection(5).Name = "=DR!R53C22"
    ActiveChart.SeriesCollection(6).XValues = "=DR!R55C23:R55C29"
    ActiveChart.SeriesCollection(6).Name = "=DR!R54C22"
Avatar billede tfa_dk Nybegynder
04. november 2003 - 18:25 #7
Så skal jeg bruge hele Charts.Add koden før du retter sData da du skal bruge en delmængde af sData.

Det er noget med:

ActiveChart.SeriesCollection(1).Name = sData.Cells(1,1)
ActiveChart.SeriesCollection(2).Name = sData.Cells(2,1)

ActiveChart.SeriesCollection(1).XValues = sData.Range(sData.Cells(x1,y1), sData.Cells(x2,y2))

brug evt.

With sData
    ActiveChart.SeriesCollection(x).XValues = .Range(.Cells(x1, y1),.Cells(x2, y2))End With
End With

Har ikke mere tid i dag.
Avatar billede rune_a Nybegynder
18. august 2010 - 12:39 #8
Jeg prøver at lukke spørgsmålet - tak til alle der har svaret!
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