Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Timer VBA.
Mroowek




Typ: neutral
Postów: 51
Zarejestrowany: Feb 2005
Timer VBA.

Witam.

Czy w VBA jest taka kontrolka jak Timer z VB???

opisze po co mi to.
Chce w labelu na formie wpisywac aktualna godzine(format: hh:mm:ss).
Nie wiem jak mam zrobic odswiezanie labela tak zeby nie wciagalo calego procesora... jak w przypadku ponizszej procedurki:


Private Sub UserForm_Activate()
    Do While UserForm1.Visible = True
        Me.Label1.Caption = Format(Now, "hh:mm:ss"
        DoEvents
    Loop
End Sub


Bo z kontrolką z VB typu Timer i takim kodzikiem:

Private Sub Timer1_Timer()
    Label1.Caption = Format$(Time)
    Timer1.Interval = (1 - (Int(Timer) Mod 1)) * 1000
End Sub

działa pięknie i nie zżera procesora.

Pomocy bo już nie wiem gdzie mam szukać.

11-04-2005 23:21
Pokaż profil Mroowek  Wyślij email do Mroowek        4892300
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

Rzoumiem, że chodzi o Excel lub Word.

Otóż nie ma czegoś takiego jak Timer dla tych aplikacji.


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

11-04-2005 23:34
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

A zobacz metodę OnTime, może Ci wystarczy:

Application.OnTime :

Schedules a procedure to be run at a specified time in the future (either at a specific time of day or after a specific amount of time has passed).

i tutaj:

http://www.enhanceddatasystems.com/ED/Pages/ExcelTimer.htm

[Post edytowany dnia 12-04-2005 00:02 przez karolinavb]


_____________________________________________
Karolina

11-04-2005 23:58
Pokaż profil karolinavb  Wyślij email do karolinavb   
Mroowek




Typ: neutral
Postów: 51
Zarejestrowany: Feb 2005

Dzieki za tak szybkie odpowiedzi!!!!!

Juz sie zabieram do robotki... dluga noc przedemna jak cos zrobie to napisze.

Pozdrowionka

12-04-2005 00:01
Pokaż profil Mroowek  Wyślij email do Mroowek        4892300
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Tu jest ładny opis wykorzystania OnTime oraz Timera Windowsa również:

http://www.cpearson.com/excel/ontime.htm


_____________________________________________
Karolina

12-04-2005 00:06
Pokaż profil karolinavb  Wyślij email do karolinavb   
Mroowek




Typ: neutral
Postów: 51
Zarejestrowany: Feb 2005

Juz biorę się za te lekturki

12-04-2005 00:11
Pokaż profil Mroowek  Wyślij email do Mroowek        4892300
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

No tak, pseudo Timer jest, ale zauważ, że jest podstawowa różnica między Timerem wywoływanym poprzez funkcje API, a funkcją OnTime Excel'a.

Pierwsza zawsze się będzie wykonywać niezależnie od tego, co robisz w Excelu. Druga będzie czekać, aż zakończyć czynności kopiowania, edycji itp.

Ponadto, kiedyś już miałem problem z OnTime przy formularzach. Ze względu na na to, że nie pamiętam o co chodziło, nie jestem w stanie powiedzić na czym polegał problem.


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

12-04-2005 18:32
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Mroowek




Typ: neutral
Postów: 51
Zarejestrowany: Feb 2005

Witam.

Na stronicach,które podała Karolina wynalazłem chyba wszystko na temat tych Timer-ów...

Znalazłem między innnymi Timer realizowany przy użyciu API (który wykorzystałem), oraz kontrolkę ActiveX, która się nazywa VBATimer (www.enhanceddatasystems.com/ED/Pages/ExcelTimer.htm) i działa jak Timer z VB.
Żeby wykorzystać tą kontrolkę, to musiałem ją najpierw zarejestrować w systemie, no a przy odpalaniu arkusza z tą kontrolką wywala ostrzeżenie, że odpalana jest kontrolka ActiveX. Pewnie można powyłączać te ostrzeżenia, ale nie myślałem nad tym nawet, tylko postanowiłem użyć API.

Public Declare Function SetTimer Lib "user32" ( _
                                                                ByVal HWnd As Long, ByVal nIDEvent As Long, _
                                                                ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" ( _
                                                                ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
Public TimerID As Long
Public TimerSeconds As Single

Sub StartTimer()
    TimerSeconds = 1 ' Jak czesto zmieniamy zegar.
    TimerID = SetTimer(0&, 0&, TimerSeconds * 1000&, AddressOf TimerProc)
End Sub

Sub EndTimer()
    On Error Resume Next
    KillTimer 0&, TimerID
End Sub

Sub TimerProc(ByVal HWnd As Long, ByVal uMsg As Long, _
                                                                ByVal nIDEvent As Long, ByVal dwTimer As Long)
    'tu wpisujemy operacje jakie sie wykonuja co np.sekunde.
    frmMenu.lblGodzina.Caption = Time

End Sub


Szczerze mówiąc to na OnTime nie poświęciłem ani chwili...

Dziękuję Wam za pomoc Karolino i losmac-u

12-04-2005 22:39
Pokaż profil Mroowek  Wyślij email do Mroowek        4892300
Wszystkich odpowiedzi: 7 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1