Chạy đồng hồ đếm ngược

Liên hệ QC

maxgoldk

Thành viên mới
Tham gia
25/2/14
Bài viết
6
Được thích
0
chào ACE,

Em có sub sau đây để chạy đồng hồ đếm ngược

Trong đó H2 của em là 00:00:09 (9 giây)

Khi em chạy sub dưới trong 2 file khác nhau. 1 file thì chạy đếm ngược từ 9 đến 0 bình thường, k xảy ra vấn đề gì

Còn 1 file thì chạy bị sai. Nó lặp lại từ đoạn em in đậm, nên k chạy đếm ngược mà cứ chạy 9 rồi 9 rồi 9 rồi 9 hoài k dừng. em phải vào biến đoạn in đậm thành comment thì nó mới chạy từ 9 đến 0. còn không thì nó cứ lặp lại câu lệnh in đậm đó nên cứ 9, rồi 9, rồi 9 hoài k tắt.

Mong mọi người chỉ giáo giúp em, tại sao cùng 1 kiểu code mà nó xử lý khác nhau. em k hiểu đc.

Em cảm ơn
---

Sub timer()
Dim inteval As Date


Sheet6.Range("H2:H4") = range("H2")


If Sheet6.Range("H2").Value = 0 Then Exit Sub

Sheet6.Range("H2") = Sheet6.Range("H2") - TimeValue("00:00:01")

inteval = Now + TimeValue("00:00:01")
Application.OnTime inteval, "timer"

End Sub

---
 
Lần chỉnh sửa cuối:
Thứ nhất: File thứ hai có phải sheet6 hay không, hay là sheet1. Việc này chỉ là lưu ý, vì may sao vẫn là Sheet6 và đọc được H2
Thứ hai: Tại sao gán H2:H4 = H2? Nhiều ô lấy giá trị từ 1 ô? Mà lại lấy chính nó?
Thứ ba: Phải viết tường minh Sheet6.Range("H2:H4") = range("H2") range chữ đỏ là của sheet nào? (đang đứng sheet nào mà chạy code)
 
Upvote 0
Bạn thử để trong cặp With thử xem
PHP:
Sub timer()
    Dim inteval As Date
    With Sheet6
'Thường chỗ này mình kg dùng Sheet6 mà dùng refer trực tiếp tên sheet Sheets(" Tên Sheet") ví dụ Sheets("Data")
        .Range("H2:H4") = .Range("H2")
        If .Range("H2").Value = 0 Then Exit Sub
        .Range("H2") = .Range("H2") - TimeValue("00:00:01")
        inteval = Now + TimeValue("00:00:01")
        Application.OnTime inteval, "timer"
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
100% mã OnTime bắt buộc viết đúng cú pháp như sau:
Application.OnTime inteval,"'" & ThisWorkbook.Name & "'!timer"

Để chạy đủ 9 giây thật sự thì không phải sử dụng
inteval = VBA.Now + TimeValue("00:00:01")

Đặt inteval là biến toàn cục
inteval = VBA.Now + TimeSerial(0, 0, Range("H2").Value)
If VBA.Now >= inteval Then
Exit Sub
End if

Mã:
Public inteval As Date, savetime as date
Sub runtimer()
    On error goto E
    savetime = Sheet6.Range("H2").Value
    inteval = VBA.Now + savetime
    call timer
E:
End sub
Sub timer()
    With Sheet6
        .Range("H2:H4") = .Range("H2")
        If vba.now < inteval Then
             .Range("H2") = inteval  - vba.now   
             Application.OnTime vba.Now + timeserial(0 ,0, 1) / 2,"'" & ThisWorkbook.Name & "'!timer"
        Else
            inteval = 0: .Range("H2").Value = savetime
        End if
    End With       
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom