Application.OnTime tidak ada bedanya antara xl2007 dengan versi lainnya.

Script aktifkan pesan thread agar prosedur SetTimer dijalankan diwaktu
tertentu :
Public Sub SetTimer()
    Dim lState As Long   'var status locked (0 = false alias bisa diubah
isi cellnya, selainnya tidak bisa)
    Dim dtNext As Date   'data waktu akan dijalankannya lagi prosedur
settimer ini

    dtNext = Now()       'nilai waktu awal
    lState = (Hour(dtNext) + 3) Mod 4  'set status
    Sheet1.Protect "Belajar-Excel", userinterfaceonly:=True   'proteksi
sheet
    Sheet1.Range("i2").Locked = (lState <> 0)    'set properti locked milik
cell i2

    'menentukan waktu untuk dijalankannya lagi prosedur settimer
    dtNext = Int(Now) + TimeValue(Hour(dtNext) & ":00:00") + TimeValue(2 -
lState Mod 2 & ":00:00")

    'proses pesan thread agar pada waktu dtNext, prosedur bernama SetTimer
dijalankan
    Application.OnTime dtNext, "SetTimer"
End Sub

Script pembatalan pesanan thread proses di atas :
Public Sub StopTimer()
    On Error Resume Next   'trap error

    'batalkan pesanan thread
    Application.OnTime Now + TimeValue("00:00:01"), "SetTimer",
schedule:=False

    'clear error dan set trap error kembali seperti semula
    Err.Clear
    On Error GoTo 0
End Sub

Jika masih error, coba :
1. hapus dim dtNext as date dari dalam prosedur SetTimer
2. buat deklarasi pada level module dengan scope public untuk variabel
dtNext bertipe date (sebelum prosedur SetTimer = baris kedua dalam lembar
script)
public dtNext as date
3. pada prosedur stoptimer bagian :
Now + TimeValue("00:00:01")
diubah menjadi :
dtnext

Wassalam,
Kid.


On Thu, Nov 22, 2012 at 8:12 PM, ngademin Thohari <[email protected]>wrote:

> **
>
>
> mr. kid
> sudi kah kiranya menjelaskan di bawah ini, saya masih bingung plus awam
>
> Option Explicit
>
> Public Sub SetTimer()
>     Dim lState As Long
>     Dim dtNext As Date
>
>     dtNext = Now()
>     lState = (Hour(dtNext) + 3) Mod 4
>     Sheet1.Protect "Belajar-Excel", userinterfaceonly:=True
>     Sheet1.Range("i2").Locked = (lState <> 0)
>     dtNext = Int(Now) + TimeValue(Hour(dtNext) & ":00:00") + TimeValue(2 -
> lState Mod 2 & ":00:00")
>     Application.OnTime dtNext, "SetTimer"
> End Sub
>
> Public Sub StopTimer()
>     On Error Resume Next
>     Application.OnTime Now + TimeValue("00:00:01"), "SetTimer",
> schedule:=False
>     Err.Clear
>     On Error GoTo 0
> End Sub
>
> terima kasih
>
> amin
>
>  
>

Kirim email ke