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.
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 Sub
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
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:
Celý proces by mal fungovať tak, ako to ukazujem v nasledujúcom videu:
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:
Žiadne komentáre:
Zverejnenie komentára
Poznámka: Komentár môže zverejniť iba člen tohto blogu.