Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Akselien arvojen muuttaminen Excelissä

tuomas88 [30.05.2008 08:29:46]

#

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!

tuomas88 [30.05.2008 12:25:50]

#

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

Short Php [30.05.2008 13:40:34]

#

tms_ kirjoitti:

// miksi alkuperäistä viestiä ei voi enää muokata...

Tunnin aikaraja muokkaukselle.

neau33 [31.05.2008 16:50:16]

#

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

tuomas88 [12.06.2008 10:41:31]

#

Kiitos Neau33! Tuon pohjalta sain itse säädettyä toimivan pätkän :P

tuomas88 [09.07.2008 09:05:21]

#

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!

Vastaus

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

Tietoa sivustosta