Hei!
En onnistu kirjoittamaan tuota rangea oikein. ideana koodissa siis, että x = solu, josta löytyy käyttäjän valitsema kuvaaja, jonka mukaan tulostuu ohjelma tulostaa kuvaajan, ja z = solu, josta alkaa kuvaajan tiedot.
Dim x As Range Set x = Range("A1:A100").Find(What:="Valittu kaavio:").Offset(1, 0) If x.Value = "Piirakkadiagrammi kategorioittain" Then Set z = Range("A10:A100").Find(What:="Kategoriat").Offset(1, 0) With ActiveSheet.ChartObjects.Add _ (Left:=400, Width:=375, Top:=550, Height:=225) .Chart.SetSourceData Source:=Sheets("Raportti").*Range("z.Offset(-1,0):z.Offset(3,1)")* .Chart.ChartType = xlPie
Ongelma on siis tuo tähdillä merkitty Range, miten sen saa toimimaan? Eli miten saan Rangen merkittyä tuolla tavalla z:n avulla? Miten lainausmerkit tulee laittaa tällaisessa tapauksessa? Entäs, kun myöhemmässä vaiheessa haluamani Range on kaksiosainen, miten merkitään silloin, erotetaanko osat toisistaan vain pilkulla?
Kiitos jo etukäteen, ja pahoittelut sekavasta selityksestä!
Mod. huom: käytä kooditageja!
Auttakaa nyt joku, pitäisi huomenna saada projekti kasaan!
Hei Janne!
Ehdotan:
Set z = Range("A10:A100").Find(What:="Kategoriat").Offset(1, 0)
z saa solun arvon, esim 'kategorialuokka1', jos se "Kategoriat" - sanan seuraavalla rivillä, ei solun tunnusta esim "A15". Ehkäpä siksi piirakka ei saa source-aluetta oikein
Lisäys:
Kävisikö tämä:
z.Select Set z = Range("A10:A100").Find(What:="Kategoriat").Offset(1, 0) z.Select With ActiveSheet.ChartObjects.Add _
PS: Dim z As Range (varmaan muualla jo määritetty?)
(Mod. huom: Käytä kooditageja!)
En ymmärrä, mitä yrität tehdä, mutta ehdotan, että opettelet edes alkeet merkkijonoista. Jos kirjoitat "z.Offset(-1,0)"
, tekstissäsi lukee tasan tarkkaan "z.Offset(-1,0)"
. Se ei selvästikään kelpaa solun nimeksi, jonka pitäisi olla muotoa A123. Jos kuitenkin kirjoittaisit vain z.Offset(-1,0)
ilman lainausmerkkejä, saisit jonkin varsinaisen arvon (kuten ehkä solussa olevan tekstin, en tiedä Excelistä ja VBA:sta). Tekstejä voi yhdistellä &
-merkeillä, esimerkiksi z.Offset(-1,0) & ":" & z.Offset(3,1)
. Siis älä ikinä yritä kirjoittaa koodia lainausmerkkien sisäpuolelle, koska sitä ei kuitenkaan suoriteta.
Jatkan vielä siten, että valitaan selectillä solu joka on löytynyt, eli aiemmassa kohdassani
z.Select
oletetaan, että haettu solun arvo on solussa "A15".
ActiveCell.Column = 1 ActiveCell.Row = 15
Tätä makro ei ymmärrä, koska sille ActiveCell.Column pitäisi olla "A". Ykkönen muuttuu aaksi seuraavasti(A-Z sarakkeisiin, jos etenee AA, AB...lasku jatkuu)
Chr(ActiveCell.Column + 64)
Piirakan aloitussolu olisi siten
Range(Chr(ActiveCell.Column + 64) & ActiveCell.Row)
- lisäksi ne riville ylöspäin hypyt
ja lopetus samaan tapaan. Tekisin itse apumuuttujan alkusolu ja loppusolu.
Sain näin itse toimimaan piirakan. En tosin tehnyt noita offsettejä enää nyt.
(Mod. huom: Käytä kooditageja!)
Hei taas!
Koodi näyttää nyt tältä :
ElseIf x.Value = "Piirakkadiagrammi elintarviketuotteista" Then Dim z As Range Set z = Range("A1:A100").Find(What:="Yhteensä").Offset(-1, 0) rivi = z.Row With ActiveSheet.ChartObjects.Add _ (Left:=400, Width:=375, Top:=550, Height:=225) .Chart.SetSourceData Source:=Sheets("Raportti").Range("A5:B" & rivi) .Chart.ChartType = xlPie .Chart.ApplyLayout (2) .Chart.ChartTitle.Text = "Varastossa" End With With ActiveSheet.ChartObjects.Add _ (Left:=800, Width:=375, Top:=550, Height:=225) .Chart.SetSourceData Source:=Sheets("Raportti").Range(("A5:A" & rivi), ("C5:C" & rivi)) .Chart.ChartType = xlPie .Chart.ApplyLayout (2) .Chart.ChartTitle.Text = "Myyty"
Ongelmana on nyt siis etteivät kuvaajat piirry oikein, vaan kun kuvaaja piirtyy, näkyy formula barissa kaavana
=SERIES(;Raportti!R5C1:R21C1;Raportti!R5C2:
vaikka pitäisi olla Column 3. Muuttuu jatkuvasti itsestään column kolmeen vaikka mielestäni koodissani lukee selvästi C5:C&rivi, ja tällä hetkellä rivi = 21. Mitä tälle on tehtävissä?
Mod. huom: Ole hyvä ja käytä kooditageja! Ei ole vaikeaa.
Saakohan sinulla "Myyty" piirakka lainkaan sourcedataa uudelleen. Onko mahdollista, että se ei saa sitä, jonka vuoksi se käyttää aiempaa "Varastossa" -piirakan sourcedataa?
Moi jannekala!
'testi rivi = 20 Range(("A5:A" & rivi), ("C5:C" & rivi)).Select 'tämä tekee saman asian, kuin 'Range("A5:C" & rivi).Select 'tämä eli valitsee yhtenäisen solualueen "A5:C20" 'Range("A5:A" & rivi & ",C5:C" & rivi).Select 'tämä taas valitsee solualueen 'joka muodostuu sarakkeen A rivien 5 - 20 sekä sarakkeen C rivien 5 - 20 soluista
elikäs offset-kikkailuna jutska vois näyttää vaikkapa seuraavalta...
'... Set z = Range("A10:A100").Find(What:="Yhteensä").Offset(-1, 0) '... .Chart.SetSourceData Source:=Sheets("Raportti").Range( _ z.Offset(-15, 0).Address & ":" & z.Offset(1, 1).Address) '... .Chart.ChartTitle.Text = "Varastossa" '... '... .Chart.SetSourceData Source:=Sheets("Raportti").Range( _ z.Offset(-15, 0).Address & ":" & z.Offset(1, 0).Address & _ "," & z.Offset(-15, 2).Address & ":" & z.Offset(1, 2).Address) '... .Chart.ChartTitle.Text = "Myyty" '...
Aihe on jo aika vanha, joten et voi enää vastata siihen.