Graf (določanje vrednosti X in Y osi)

Pomoč pri izdelavi makrov
Odgovori
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Graf (določanje vrednosti X in Y osi)

Odgovor Napisal/-a capirossi »

Pozdravljeni,

imam eno težavo in bi prosil za pomoč.
V stolpcu A (datum) in B (vrednosti) imam zapisane vrednosti, ki jih želim prikazati na grafu. Število zapisov se spreminja (od 10-100) in sedaj bi rad, da bi se tudi obseg X in Y osi spreminjal glede na število zapisov.
Za X os sem posnel makro in malo priredil kodo...

Koda: Izberi vse

Sub prikaz_na_grafu()

Dim zadnji_zapis_graf As Long
zadnji_zapis_graf = ActiveSheet.Range("A65536").End(xlUp).Row

    ActiveSheet.ChartObjects("Grafikon 1").Activate
    ActiveChart.Axes(xlCategory).Select
    With ActiveChart.Axes(xlCategory)
        .MinimumScale = ActiveSheet.Range("A1")
        .MaximumScale = ActiveSheet.Range("A" & zadnji_zapis_graf)
        .MinorUnit = 0.5
        .MajorUnit = 1
        .Crosses = xlCustom
        .CrossesAt = Auto
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With


End Sub
Ta koda deluje dobro in mi X os naredi tako kot sem si zamislil. Težava pa nastane pri Y osi. Posnel sem naslednjo kodo:

Koda: Izberi vse

ActiveSheet.ChartObjects("Grafikon 1").Activate
    ActiveChart.PlotArea.Select
    ActiveChart.SeriesCollection(1).Values = "=Graf!R1C1:R30C1"
in jo poizkušal prirediti ampak mi ni uspelo. Ne vem kako naj namesto R30C1 vpišem spremenljivko zadnji_zapis_graf?

Obstaja še kakšna druga rešitev...?

Že v naprej se zahvaljujem za pomoč.

Lep pozdrav, Loris
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Relativno preprosto:

Koda: Izberi vse

ActiveChart.SeriesCollection(1).Values = "=Graf!R1C1:R" & zadnji_zapis_graf & "C1"
lp,
Matjaž Prtenjak
Administrator
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Odgovor Napisal/-a capirossi »

Hvala za hiter odgovor ampak mi program javi napako: "Ni mogoče nastaviti lastnosti: Values razreda: Series" in obarva rumeno zgornji stavek.

Sumim, da sem napako naredil kej drugje tako, da prilagam celotno kodo:

Koda: Izberi vse

Sub prikaz_na_grafu()

Dim zadnji_zapis_graf As Long
zadnji_zapis_graf = ActiveSheet.Range("I65536").End(xlUp).Row

    ActiveSheet.ChartObjects("Grafikon 11").Activate
    ActiveChart.PlotArea.Select
    ActiveChart.SeriesCollection(1).Values = "=Graf!R18C9:R" & zadnji_zapis_graf & "C9"
    ActiveChart.Axes(xlCategory).Select
    With ActiveChart.Axes(xlCategory)
        .MinimumScale = ActiveSheet.Range("H18")
        .MaximumScale = ActiveSheet.Range("H" & zadnji_zapis_graf)
        .MinorUnit = 0.5
        .MajorUnit = 1
        .Crosses = xlCustom
        .CrossesAt = Auto
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    
End Sub
Kje sem ga polomil?

Lep pozdrav, Loris
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

hm.. pravo vprašanje je, kako je vam uspelo takšen makro posneti? Pres se namreč sploh nisem spuščal v samo kodo, temveč sem vam samo zapisisal, kako neko vrednost spraviti v niz znakov. Problem, ki ga ima vaša koda pa je v tem, da je lastnost

Koda: Izberi vse

ActiveChart.SeriesCollection(1).Values
seznam (array) realnih števil in ne niz znakov, zatorej tudi osnovna koda, ki ste jo zapisali in za katero pravite, da ste jo posneli, ne more delovati:

Koda: Izberi vse

' tole tudi ne deluje...
ActiveChart.SeriesCollection(1).Values = "=Graf!R1C1:R30C1"
Posnamite celoten makro še enkrat in potem zamenjajte elemente.
lp,
Matjaž Prtenjak
Administrator
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Odgovor Napisal/-a capirossi »

Sem posnel makro še enkrat in dobil čisto drugo - pravilno kodo...

Koda: Izberi vse

    ActiveSheet.ChartObjects("Grafikon 1").Activate
    ActiveChart.PlotArea.Select
    ActiveChart.SetSourceData Source:=Sheets("Graf").Range("H18:I" & zadnji_zapis_graf), _
        PlotBy:=xlColumns

Hvala za pomoč in lep pozdrav!
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Odgovor Napisal/-a capirossi »

Imam še 1 vprašanje pa bom kar tukaj vprašal...

Kako naj napišem kodo, da se bo izvedla vsakič ko pritisnem na potrditveno polje pa čeprav je že obkljukano?

Hvala za odgovor in lep pozdrav.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Desnokliknite potrditveno polje in iz menija izberite 'Priredi makro'. Makro, ki ga izberete se bo izvedel vedno ko kliknete na potrditveno polje.
lp,
Matjaž Prtenjak
Administrator
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Odgovor Napisal/-a capirossi »

Možnosti priredi makro nimam...imam pa ogled kode in napišem naslednjo kodo:

Koda: Izberi vse

Private Sub graf_podatki_dan_Click()
koledar.Calendar1.Value = Now()
koledar.Show
End Sub
Bi bila kakšna razlika, če bi uporabil funkcijo priredi makro?
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Potem pa ne uporabljate 'Potrditvenega polja', temveč 'Check box' - med tema pa je velika razlika. Prvi se nahaja na orodni vrstici 'Obrazci', Drugi pa na orodni vrstici 'Orodjarna kontrolnikov'.

V tem primeru pa je koda, ki ste jo zapisali povsem pravilna - torej v vašem primeru pokaže koledar, ko opcijo vključite ali ko jo izključite - Saj to je natanko tisto, kar želite?
lp,
Matjaž Prtenjak
Administrator
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Odgovor Napisal/-a capirossi »

Jap, želim točno to ampak jaz sem uporabil OptionButton in je vrednost ob kliku vedno ostala na TRUE, na FALSE sem jo spravil le, če sem kliknil na drugi OptionButton...no sedaj sem zamenjal z CheckBox in koda deluje.

Hvala za pomoč.

Lep vikend
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Re: Graf (določanje vrednosti X in Y osi)

Odgovor Napisal/-a capirossi »

Pa sem malo prehitro rekel, da koda deluje...sicer mi sedaj pokaže koledar vsakič ko kliknem na ComboBox problem pa je, da bi se koledar mogel skriti ko kliknem na datum pa se to ne zgodi oz mi ga prikaže ponovno.

Koda je naslednja:

Koda: Izberi vse

Private Sub graf_podatki_dan_Click()
graf_vsi_podatki.Value = False
graf_podatki_teden.Value = False
koledar.Calendar1.Value = List1.Range("A4")
graf_podatki_dan.Value = True
koledar.Show
End Sub
----------------------------------------------------------------
Private Sub graf_podatki_teden_Click()
graf_vsi_podatki.Value = False
graf_podatki_dan = False
koledar.Calendar1.Value = List1.Range("A4")
graf_podatki_teden.Value = True
koledar.Show
End Sub
Koda za koledar pa je naslednja:

Koda: Izberi vse

Private Sub Calendar1_Click()

List2.Range("Y6").Select
List2.Range(Selection, Selection.End(xlToRight)).Select
List2.Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents

Dim mesto_zapisa As Integer
mesto_zapisa = 6
Dim zadnji_zapis As Long
zadnji_zapis = List1.Range("A65536").End(xlUp).Row

If List2.graf_podatki_teden.Value = True Then
     'tukaj poiščem podatke, ki bodo prikazani na grafu
End If


If List2.graf_podatki_dan.Value = True Then
     'tukaj poiščem podatke, ki bodo prikazani na grafu
End If

koledar.Hide

prikaz_na_grafu
ActiveWindow.ScrollColumn = 9

End Sub
Torej ko kliknem na ComboBox "Dnevni prikaz" (graf_podatki_dan) se mi odpre koledar, kjer izberem dan...nato bi mi moralo podatke od tistega dne prikazati na grafu vendar mi jih ne...namesto tega se spet odpre koledar. Ker se mi niti ne sanja kje bi lahko bila napaka vas prosim za pomoč.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Graf (določanje vrednosti X in Y osi)

Odgovor Napisal/-a admin »

Hm... tole bo pa težko, tek ne poznam siceršnega izgleda vaših podatkov. Vsekakor ste si pa stvar zastavili malce "čudno".

Že prvič mi ni bilo jasno, zakaj želite prikazati koledar tudi če izklopite prikaz po dnevih? V tem primeru mora torej človek izbrati datum iz koledarja, da mu potem ne prikaže nič :)... To sicer nima zveze z vašim konkretnim problemom, mi je pa čudno.

Vi pravite:
...nato bi mi moralo podatke od tistega dne prikazati na grafu vendar mi jih ne...
Ta del boste morali rešiti v kodi Calendar1_Click(), saj tam rišete grafe - mogoče bi vam namignil samo da pogledate ali rišete podatek zares za izbran datum ali za kakšen drug datum!
..namesto tega se spet odpre koledar...
Tega pa iz vaše priložene kode ne vidim in ne vem zakaj bi se vam koledar še enkrat odprl?
lp,
Matjaž Prtenjak
Administrator
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Re: Graf (določanje vrednosti X in Y osi)

Odgovor Napisal/-a capirossi »

Zamišljeno je tako da prikaza na grafu ne moreš več izklopiti lahko ga samo spreminjaš (iz vsi podatki, tedenski podatki ali dnevni podatki). Torej če najprej gledaš za 21.5 in bi potem rad pogledal podatke za 22.5 ponovno klikneš na "Dnevni prikaz" iz odpre se ti koledar v katerem izbereš 22.5, ComboBox "Dnevni prikaz" pa ostane na TRUE. Zato sem v zgornjih postih spraševal o zaporednih klikih.

Problem v kodi Calendar1_Click() sem rešil (skliceval sem se na napačne celice) in sedaj mi po kliku na datum prikaže podatke v grafu. Vendar koledar še vedno ne izgine.

Sedaj bom ComboBox-e zamenjal z tipkami in upam, da bo delovalo.

Hvala za pomoč in lep pozdrav.
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Graf (določanje vrednosti X in Y osi)

Odgovor Napisal/-a admin »

Ravno to sem vam želel svetovati... Vi ne potrebujete ComboBox-a, temveč navaden gumb. V kodi Calendar1_Click poskusite namesto:

Koda: Izberi vse

  koledar.Hide
napisati:

Koda: Izberi vse

  Me.Hide
lp,
Matjaž Prtenjak
Administrator
capirossi
Prispevkov: 25
Pridružen: Če Dec 10, 2009 12:51 pm

Re: Graf (določanje vrednosti X in Y osi)

Odgovor Napisal/-a capirossi »

Tudi to ne deluje...

Je pa zanimivo, da ko pritisnem na ComboBox "Dnevni prikaz" se koledar odpre 3x zapored potem pa se skrije, pri Comboboxu "Tedenski prikaz" se pa odpira dokler ne zaprem Excela v task managerju pa čeprav je koda pri obeh popolnoma ista...

Sem pa že zadevo rešil s tipkami tako da stvar deluje.

Lep pozdrav, Loris
Odgovori