< návrat zpět

MS Excel


Téma: EnableEvents=? rss

Zaslal/a 9.2.2015 21:13

Ahoj lidi!
Špekuluju jak vyřešit tuto situaci. Chci zajistit, aby v daném sešitě, pokud je tento Aktivní bylo EnableEvents vždy True.
Jedná se mi o situaci, kdy uživatel přepne do jiného sešitu, tam třeba nevědomky vypne Sledování Událostí a následně přepne zpátky do onoho sešitu.
Zatím jsem to vyřešil takto:Dim eeStart As Date
Private Sub Workbook_Activate()
If eeStart > 0 Then Application.OnTime eeStart, "ThisWorkbook.Zapni_Udalosti", , False
'další kód
End Sub

Private Sub Workbook_Deactivate()
eeStart = Now + TimeValue("00:00:02")
Application.OnTime eeStart, "ThisWorkbook.Zapni_Udalosti"
End Sub

Private Sub Zapni_Udalosti()
If ActiveWindow.Parent.Name = ThisWorkbook.Name Then
If Not Application.EnableEvents Then
Application.EnableEvents = True
eeStart = 0
Call Workbook_Activate
End If
Else
eeStart = Now + TimeValue("00:00:02")
Application.OnTime eeStart, "ThisWorkbook.Zapni_Udalosti"
End If
End Sub
Ale nebylo by nějaké API, nebo něco?

Zaslat odpověď >

icon #023573
eLCHa
Můžete se zkusit podívat na API funkce
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
ale, pokud je budete testovat, nemějte rozdělanou jinou práci a počítejte s pády aplikace. Trvalo mi dlouho, než jsem to odladil a používám pouze krátkodobě. Vy to chcete použít po celou dobu spuštění sešitu a tam vidím nebezpečí.
Možnou cestou je napsat utilitku například v C# (zadarmo) - zavolat ji při spuštění souboru a vypnout. Je třeba ale nastudovat spolupráci C# a excel - jde to - někde jsem to použil a tuším, že tam lze používat i události (je už to dlouho ;) )
A protože by to byla krátká utilitka, nebyl by ani problém vložit ji přímo do souboru - dočasně vytvořit a na konci zabít.

U Vašeho kódu mi chybí vypnutí OnTime, něco jakoApplication.OnTime EarliestTime:=eeStart, Procedure:="ThisWorkbook.Zapni_Udalosti, Schedule:=False"Nedělá to problémy?citovat
#023579
avatar
eLCHa díky za Funkce! Podívám se co umí. Dělám jenom pro svoje děcka takové domácí účetnictví, nic světoborného. Tak že se kvůli tomu nebudu pouštět do pro mě neznámého jazyka (při mém věku). Vypnutí je přece v "Wb_Activate".citovat
icon #023580
eLCHa
Občas lituji, že MS nezvolil C# ...
Jo, sry jsem slepý. ;)citovat
#023582
avatar
Už jsem tento názor zaregistroval vícekrát. Zřejmě pravda.citovat
#023609
avatar
eLCHa tak ten "SetTimer" je jen obdoba "OnTime", prostě časovač. Něco jsem si o tom přečetl a raději ne. Já měl na mysli spíš sledování událostí na úrovni OS, něco jako Wb/Wn_Activate. Ale nevadí, i to moje řešení je celkem v poho. Ještě jednou díky.citovat

Uživatelské menu

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

Menu

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