< návrat zpět

MS Excel


Téma: Zvláštní chování události OnTime rss

Zaslal/a 21.12.2025 21:47

Mám aplikaci, jejíž ovládání spočívá ve volání jednotlivých procedur VBA z menu, které má uživatel k dispozici. Nezávisle na tomto manuálně ovládaném provozu potřebuji, aby v časově konstantní periodě byla volána procedura jiného typu.
K ovládání tohoto nezávislého a opakovaného procesu jsem se pokusil využít událost Application.OnTime.
Zaskočilo mne, že se u mne tato událost striktně neřídí dobou, kdy má být spuštěna volaná procedura. Svůj algoritmus opakovaného volání jsem přepsal do jednoduché ukázky, která dokumentuje proměnnost periody volané procedury. Ukázku s bližším popisem chování přikládám. Smyslem mého dotazu je nalezení způsobu, jak opakovaně volat proceduru s konstantní délkou volacího cyklu.

Příloha: zip57632_ontime.zip (19kB, staženo 3x)
Zaslat odpověď >

#057633
Začátečník
Procedura se chová podle očekávání (MSO 365), tedy sloupec C a D se plní správně, vždy o požadovaný počet.
Snad jen možná chyba při vkládání formátu, buňky ve sloupci D jsou formátovány jako vlastní formát h:mm, ale vy do nich vkládáte hodnotu Format(Cd, "h:ss").
Zkuste změnit fomát na h:mm:ss a také tak vkládat Format(Cd, "h:mm:ss").

I po prodloužení intervalu na 2 sec, se chová naprosto standardně.

Co se týče vypnutí procedury Application.OnTime Lim, "Novy", , Falsemusí být proměnná Lim nastavena na hodnotu s jakou byla spuštěna předchozí Application.OnTime Lim, "Novy"
Set Schedule to False to clear a procedure previously set with the same Procedure and EarliestTime values.citovat
#057634
avatar
Dík za odpověď. Pokud to v Excelu 365 běhá správně, je to dobrá zpráva. V mém Excelu 2021 to zlobí. U mne nejde o špatný formát při zápisu, ale o skutečné a citelné prodlužování doby opakování. Musím proto hledat dál, jak ten problém v mém Excelu 2021 překonat
Co se týká formátu "h:ss", ten funguje správně jako "hodiny:sekundy". Zato formát "m:ss" se u mne chová jako "měsíc:sekundy", nikoliv jako "minuty:sekundy". Kolize ve výkladu zmaku "m" (měsíc/minuty) mne překvapila, ale nezaskočila. Prívě proto jsem použil nezvyklé "h:ss".
O podmínce pro hodnotu Lim při rušenní události OnTime jsem nevěděl. Dík za info!citovat
#057635
Začátečník
Neřekl bych, že tohle je o verzi MSO, ale spíše o tom jak je to používáno. Excel není přesný časovač.
Pokud má být proces spuštěn vždy o stejný rozdíl, pak je vhodnější použít Application.OnTime Now() + TimeValue("00:00:01"), "Novy"v praxi může způsobit rozdíl spuštění výpočtu doby, překreslení dat, samotný běh makra, atd.

Public DalsiCas As Date
Sub StartTimer()
DalsiCas = Now + TimeValue("00:00:05")
Application.OnTime DalsiCas, "TimerAkce"
End Sub

Sub TimerAkce()
Debug.Print "Proběhlo: " & Now
StartTimer ' znovu naplánuje další spuštění
End Sub

Sub StopTimer()
On Error Resume Next
Application.OnTime DalsiCas, "TimerAkce", Schedule:=False
End Sub


Vovka napsal/a:

...Co se týká formátu "h:ss", ten funguje správně jako "hodiny:sekundy". Zato formát "m:ss" se u mne chová jako "měsíc:sekundy"...
to je standadní nastavení funkce FORMAT
"mm:ss" lze použít jako minuty:sekundy jen tehdy, pokud předchází h nebo hh,
pokud tedy má být výstupem minuty:sekundy musí se formát nastavit jako "nn:ss".
Více nápovědacitovat
#057636
avatar
Nic kloudného jsem nevymyslel. Nakonec jsem se obrátil na Copilota. Dodal jsem dvě odpovědi zásadního rázu:
- Potvrdil mi, že použití metody OnTime v mém provedení nutně vede na "sklouzávání" délky cyklu (1-5-20 sekund), jak jsem ho popsal. K tomu mi poslal úpravu mé procedury, jak tomu sklouzávání zamezit.
- Daleko významnější pro mne byla informace o API funkci Timer (což je něco jiného, než zabudovaný Timer v Excelu). Pomocí ní lze v Excelu vyvolat jeho dvouvláknový běh, ve kterém se automaticy probíhající cyklus nehádá s ručně volanými procedurami ve VBA.
Täto druhá možnost je pro mne ideálním návrhem. Tím mám toto vlákno pro sebe vyřešené a uzavřené. Dík za spolupráci!citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje