Em muốn sau 30 giây thì checkbox tự tắt (tự bỏ dấu check)

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,027
Được thích
165
Em chào Thầy/cô và anh chị!
Em muốn như sau:
Nếu em đã check vào chechbox, thì em muốn sau 30 giây thì checkbox tự tắt (tự bỏ dấu check)
(nếu em đã tự bỏ thì thôi, code không làm gì cả)
Em cảm ơn!
 

File đính kèm

  • HenGio.xlsx
    11.5 KB · Đọc: 11
Em chào Thầy/cô và anh chị!
Em muốn như sau:
Nếu em đã check vào chechbox, thì em muốn sau 30 giây thì checkbox tự tắt (tự bỏ dấu check)
(nếu em đã tự bỏ thì thôi, code không làm gì cả)
Em cảm ơn!
Trong module của Sheet1, dán sự kiện này vào:

Mã:
Private Sub CheckBox1_Change()
    If CheckBox1.Value Then
        Application.Wait (Now + TimeSerial(0, 0, 30))
        CheckBox1.Value = False
    End If
End Sub
 
Upvote 0
Application.Wait ngưng luôn cả Excel. Suốt 30 giây không cho làm gì cả. :D
Dùng code này chắc là ổn đó bác.

JavaScript:
Option Explicit

Private Sub CheckBox1_Change()
    If CheckBox1.Value Then
        autoOffCheckbox 10  'Don vi la giay (s)
    End If
End Sub

Sub autoOffCheckbox(waitTime As Long)
    Dim dtDate As Date, i As Long, strTime As String
    
    strTime = "00:00:" & Right("0" & waitTime, 2)
    dtDate = Now() + TimeValue(strTime)
    For i = 1 To 1000
        While Now() < dtDate
            DoEvents
        Wend
        CheckBox1.Value = False
        Exit For
    Next i
End Sub
 

File đính kèm

  • HenGio.xlsm
    19.5 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
@dangvandang
Còn 2 trường hợp mà mã gây ra lỗi:
1. Nhấn tích nhiều lần trước thời gian, tích sẽ tắt sớm hơn
2. Thoát Workbook trước thời gian, ứng dụng sẽ tự mở lại

JavaScript:
Private Sub CheckBox1_Click()
  OnTime CheckBox1.Value
End Sub
Sub TurnOffCheckbox()
    Sheet1.CheckBox1.Value = False
End Sub
Sub OnTime(schedule As Boolean)
  Static t As Date
  If schedule Then
    t = Now + TimeSerial(0, 0, 5)
  End If
  On Error Resume Next
  If t > 0 Then Application.OnTime t, "'" & ThisWorkbook.Name & "'!Sheet1.TurnOffCheckbox", , schedule
  If Not schedule Then t = 0
End Sub

Tắt Ontime trước khi thoát
JavaScript:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheet1.OnTime False
End Sub
Private Sub Workbook_AddinUninstall()
    Sheet1.OnTime False
End Sub
 
Upvote 0
Em chào Thầy/cô và anh chị!
Em muốn như sau:
Nếu em đã check vào chechbox, thì em muốn sau 30 giây thì checkbox tự tắt (tự bỏ dấu check)
(nếu em đã tự bỏ thì thôi, code không làm gì cả)
Em cảm ơn!
Mục đích để làm gì vậy nhỉ (vì yêu cầu không logic)?
Nếu chỉ là thích thì cư nhích tự viết code.
 
Upvote 0
@dangvandang
Còn 2 trường hợp mà mã gây ra lỗi:
1. Nhấn tích nhiều lần trước thời gian, tích sẽ tắt sớm hơn
2. Thoát Workbook trước thời gian, ứng dụng sẽ tự mở lại

JavaScript:
Private Sub CheckBox1_Click()
  OnTime CheckBox1.Value
End Sub
Sub TurnOffCheckbox()
    Sheet1.CheckBox1.Value = False
End Sub
Sub OnTime(schedule As Boolean)
  Static t As Date
  If schedule Then
    t = Now + TimeSerial(0, 0, 5)
  End If
  On Error Resume Next
  If t > 0 Then Application.OnTime t, "'" & ThisWorkbook.Name & "'!Sheet1.TurnOffCheckbox", , schedule
  If Not schedule Then t = 0
End Sub

Tắt Ontime trước khi thoát
JavaScript:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheet1.OnTime False
End Sub
Private Sub Workbook_AddinUninstall()
    Sheet1.OnTime False
End Sub
@AnhThu-1976 bạn bổ sung như bạn @HeSanbi góp ý để bẫy lỗi nhé.
 
Upvote 0
Mục đích để làm gì vậy nhỉ (vì yêu cầu không logic)?
Nếu chỉ là thích thì cư nhích tự viết code.
Thớt chỉ có ý tưởng nhưng chưa làm được cho nên không biết là trong trường hợp bình thường, việc này khá nguy hiểm.
Nếu đang vào dữ liệu, checkbox nó untick mà mình không hay (ngỡ là nó còn đó) thì sao?
 
Upvote 0
Thớt chỉ có ý tưởng nhưng chưa làm được cho nên không biết là trong trường hợp bình thường, việc này khá nguy hiểm.
Nếu đang vào dữ liệu, checkbox nó untick mà mình không hay (ngỡ là nó còn đó) thì sao?
Mục đích của tác giả là sau khi kiểm tra gì gì đó và sau đó buộc phải bỏ check, nếu quên thì code tự động bỏ chọn thay vì thủ công, chỉ thế thôi.
 
Upvote 0
Cái này gọi là "Cẩn tắc vô áy náy" thôi anh, kiểu người ta phòng ngừa lỡ quên thì nó tự động tương tác thôi.
Ngược lại, nếu đang "kiểm soát cái gì đó" (xem trích dẫn sau) mà nó tắt mất thì có thể "kiểm soát" nhầm.

Mục đích của tác giả là sau khi kiểm tra gì gì đó và sau đó buộc phải bỏ check, nếu quên thì code tự động bỏ chọn thay vì thủ công, chỉ thế thôi.
Lý do tại sao phải bỏ "check" mới là quan trọng?
Đã làm việc "kiểm soát" mà còn sợ "quên"? Dữ liệu kiểu này ai tin cậy nổi.
 
Upvote 0
Ngược lại, nếu đang "kiểm soát cái gì đó" (xem trích dẫn sau) mà nó tắt mất thì có thể "kiểm soát" nhầm.


Lý do tại sao phải bỏ "check" mới là quan trọng?
Đã làm việc "kiểm soát" mà còn sợ "quên"? Dữ liệu kiểu này ai tin cậy nổi.
Kiểu như nhà bật đèn nhưng quên tắt đèn thì nó tự động tắt cho đỡ tốn điện.

Dĩ nhiên người ta làm gì đều có mục đích cả, nếu như ta có giải pháp thì giúp, không thì đừng bàn sâu vào công việc của họ.
 
Upvote 0
Dĩ nhiên người ta làm gì đều có mục đích cả, nếu như ta có giải pháp thì giúp, không thì đừng bàn sâu vào công việc của họ.
Tôi cho rằng bài 14 chỉ là cảnh báo sự "nguy hiểm" (sic) chứ không phải "bàn sâu vào công việc của họ". Giúp thì giúp nhưng nếu cần cũng nên cảnh báo.
 
Upvote 0
Web KT
Back
Top Bottom