Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Range-ongelma!!

Sivun loppuun

jannekala [11.04.2013 20:19:49]

#

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!

jannekala [13.04.2013 10:32:41]

#

Auttakaa nyt joku, pitäisi huomenna saada projekti kasaan!

anneli [13.04.2013 12:33:14]

#

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!)

Metabolix [13.04.2013 12:59:31]

#

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.

anneli [14.04.2013 01:21:28]

#

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!)

jannekala [14.04.2013 14:59:54]

#

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:R21C2;1)

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.

anneli [17.04.2013 12:07:40]

#

Saakohan sinulla "Myyty" piirakka lainkaan sourcedataa uudelleen. Onko mahdollista, että se ei saa sitä, jonka vuoksi se käyttää aiempaa "Varastossa" -piirakan sourcedataa?

neau33 [17.04.2013 14:11:40]

#

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"
'...

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta