Mulla on excel-tiedostossa kaavio, joka täydentyy samalla, kun lisää taulukkoon tietoja (OFFSET-funktio ja alueiden nimeäminen). y-akselin arvoväli ei kuitenkaan luonnollisesti muutu tässä mukana. Automaattiselle sitä ei oikein voi laittaa, koska tällöin näkyy eri tavalla eri koneilla, ja alkaa kaio yleensä nollasta.
onko kenelläkään kokemusta tällaisesta? minkälainen makro osaisi asettaa tämän y-akselin arvovälin yläkohdan esimerkiksi 5 yksikköä korkeammalle, kuin suurin arvo, ja 5 yksikköä alemmalle?
Itse en ole hirveästi Visual Basicilla leikkinyt...
Kiitos!
jäipä mainitsematta, että siis samassa kaaviossa on 3 tai 2 kuvaajaa, jotka siis piirretään eri alueista.
// miksi alkuperäistä viestiä ei voi enää muokata...
tms_ kirjoitti:
// miksi alkuperäistä viestiä ei voi enää muokata...
Tunnin aikaraja muokkaukselle.
Heippa tms_!
tässä yksinkertaistettu malli...
Sub aliohjelma() Dim kaavio As ChartObject For Each kaavio In Sheets(1).ChartObjects kaavio.Activate With ActiveChart With .Axes(xlValue) .MaximumScale = .MaximumScale + 5 .MinimumScale = 0 '.MinimumScale + 5 End With End With Next End Sub
Kiitos Neau33! Tuon pohjalta sain itse säädettyä toimivan pätkän :P
moi vielä,
sain tämäntyyppisen koodin aikeiseksi (hieman lyhennetty versio):
'perustuu siihen, että taulukot omilla sivuillaan, ja taulukon nimi 'on siis kyseisen sheetin nimi Sub ArvojenMuuttaminen(TaulukonNimi As Variant, AlarajanVali As Variant, YlarajanVali As Variant) Dim TaulukonArvot() As Variant 'määritellään muutkin muuttujat tässä kohden... i = 0 With Sheets(TaulukonNimi) For Each X In .SeriesCollection i = i + 1 arvo = X.Values ReDim Preserve TaulukonArvot(1 To i) TaulukonArvot(i) = arvo Next minimi = Application.Min(TaulukonArvot) maksimi = Application.Max(TaulukonArvot) .Axes(xlValue).MinimumScale = alakohta .Axes(xlValue).MaximumScale = ylakohta End With End Sub
kuvaajat on toteutettu alueen nimeämisillä, ja nämä nimetyt alueet laajenevat automaattisesti, kun niihin lisää uusia arvoja (OFFSET-funktio).
koodi tuntuu toimivan ihan oikein.
ongelma ilmenee, kun kuvaajana colum, jossa useampi sarja. Tällöin tulee virheilmoitus "Type mismatch", kun lisää arvoja taulukkoon, mutta ei ole vielä kerinnyt lisätä niitä kaikkiin sarakkeisiin (ts. alueisiin). Esimerkiksi kahden kuvaajan tapauksessa kun on lisännyt arvon vasta toiseen alueeseen, eikä ole vielä kerinnyt lisätä toiseen. Kun kaikkiin alueisiin arvot on lisätty, koodi päivittää oikein kuvaajan akselirajat.
Debugger osoittaa virheellisesti toimivaksi kohdaksi minimi = Application.Min(TaulukonArvot).
Mikäköhän tässä nyt sitten on vielä pielessä? Olisiko teillä ehdotuksia, mitä voisin yrittää? Vai olisiko oikea ratkaisu vain piilottaa virheilmoitukset...
kiitän ja arvostan!
Aihe on jo aika vanha, joten et voi enää vastata siihen.