Banner

pondelok, 18. marca 2013

Graf, meniaci sa v čase [pre špekulantov]

 

Tento obsah je zároveň odpoveďou pre jedného obchodníka – študenta, ktorý sa okrem iného snaží robiť si svoje analýzy externe – v Excel-i a poprosil ma, či by som nemohol urobiť niečo ako predlohu toho, ako zachytiť hodnoty-meniace sa v čase a zároveň dať ich do grafu.

Odpoveďou je použitie Application.OnTime objektovej metódy

Táto srandička totiž umožňuje spúšťať makro podľa nami stanoveného intervalu, teda kontinuálne.

image

ako vidíte z obrázku, táto metóda má 4 parametre. EarliestTime musí obsahovať časovú periódu, podľa ktorej sa makro bude spúšťať neustále v čase.

Procedure as String je zase názov procedúry-makra, ktoré má zapnúť. String znamená, že máme zapísať názov vo forme textu, t.z. v “úvodzovkách”.

Posledné dva parametre sú voliteľné, LatestTime reprezentuje čas – poslednú možnosť, po ktorú má čakať, ak sa makro nemohlo spustiť v čase EarliestTime.

Posledný Schedule je defaultne nastavený na hodnotu True a ak ho upravíme na False, potom následná metóda, teda opakovanie v čase sa zastaví.

Pozor!!!: parameter EarliestTime si vytvorte ako premennú v module, aby ste nemali problém s chodom celého makra-viď nasledujúce kódy.

Do klasického modulu Module 1 vložte nasledujúce dve makra:

Option Explicit
Dim Cas

Sub AktualizujGraf()

Dim Temp

Temp = Sheets("DATA").Cells(15, 4).Value

'Skopíruje hodnoty akcie Google a vloží ju vo forme novej bunky do dat v grafe
Sheets("Output").Select
Range("G5").Select
Selection.Insert Shift:=xlDown
Range("G5").Value = Temp
   
'vymaže poslednú prebytočnú hodnotu z grafu
Selection.End(xlDown).Select
Selection.ClearContents

'Aktualizuje graf tak, aby disponoval konečným počtom vstupných dát,
'vrátane novej hodnoty, ktorú sme vložili na začiatku
ActiveSheet.ChartObjects("KURZ").Activate
ActiveChart.SeriesCollection(1).Name = "GOOGLE"
ActiveChart.SeriesCollection(1).Values = "=Output!$G$5:$G$14"
Range("G5").Select

'!!!!!!  OnTime metóda, všimnite si definíciu času !!!!!!
Cas = Now + TimeValue("00:00:10")
Application.OnTime Cas, "AktualizujGraf"
   
End Sub
Sub
StopAktualizujGraf()

'V tomto prípade sme v OnTime použili Schedule:= False, ktorým prerušíme kontinualitu
Application.OnTime Cas, "AktualizujGraf", , False
Cells(8, 2).Value = 0
End Subimage

Nasmerujte kurzor na ThisWorkbook a dvojklikom ho otvorte. Do ThisWorkbook modulu vložte tieto makra:

 

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(8, 2).Value = 0 Then
    Exit Sub
Else

    Call StopAktualizujGraf
End If

End Sub

Private Sub Workbook_Open()

Cells(8, 2).Value = 1
Call AktualizujGraf

End Subimage

tie dodatočné kódy ohľadom hodnoty v bunke na riadku 8 a stĺpci 2 slúžia ako forma ošetrenia, v rámci môjho príkladu.

Urobil som dve tlačidla: Stop a Play, ktoré buď prerušia alebo opäť spustia túto procedúru.

Celú túto parádu si môžete stiahnuť kliknutím na nasledujúci obrázok:

downloads_normal

Celý proces by mal fungovať tak, ako to ukazujem v nasledujúcom videu:

Prehľad a funkcionalita

 

Dúfam, že to mnohým pomôže v prípade komentárov alebo azda ďalších nápadov neváhajte a napíšte mi na Facebook-u kliknutím na obrázok:

EK logo FB

Žiadne komentáre:

Zverejnenie komentára

Poznámka: Komentár môže zverejniť iba člen tohto blogu.