Em muốn sau 30 giây thì checkbox tự tắt (tự bỏ dấu check) (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,067
Được thích
175
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

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

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
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ọ.
Cái chỗ tôi tô đỏ là bạn nói trên quan điểm một thành viên hay là lời cảnh báo của Ban Quản Trị?

Tôi không hề có ý giúp thớt.
Ở đây tôi cảnh báo cho các bạn khác muốn tìm hiểu về phần mềm Excel. Nếu không bàn sâu vào áp dụng thì tại sao lại phê bình tôi chỉ nói lý thuyết?
Nếu diễn đàn không thích vậy thì cứ nói thẳng ra, Tôi sẽ tự chế. Nếu tôi tự chế không kịp thì cứ thẳng tay trừng trị. Tôi đã nếm qua cách áp dụng luật diễn đàn của quý vị rồi cho nên bây giờ tôi cũng chả quan tâm mấy.
 
Upvote 0
Cái chỗ tôi tô đỏ là bạn nói trên quan điểm một thành viên hay là lời cảnh báo của Ban Quản Trị?

Tôi không hề có ý giúp thớt.
Ở đây tôi cảnh báo cho các bạn khác muốn tìm hiểu về phần mềm Excel. Nếu không bàn sâu vào áp dụng thì tại sao lại phê bình tôi chỉ nói lý thuyết?
Nếu diễn đàn không thích vậy thì cứ nói thẳng ra, Tôi sẽ tự chế. Nếu tôi tự chế không kịp thì cứ thẳng tay trừng trị. Tôi đã nếm qua cách áp dụng luật diễn đàn của quý vị rồi cho nên bây giờ tôi cũng chả quan tâm mấy.

Này anh, như tôi đã 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.
Tác giả chỉ cần một cái "công tắc tự động", không có quá cao siêu hoặc quá vĩ mô đến nổi viết một phần mềm như anh tưởng tượng, nếu họ có khả năng đó thì chẳng bao giờ hỏi những thứ bình thường như thế. Vậy cho nên tôi nghĩ là thành viên, người ta nhờ giúp đỡ vấn đề gì, nếu mình có lòng thì trả lời những vấn đề đó thôi, cho nên tôi nói như dưới đây là vậy mà không có mục đích gì khác, nếu tác giả muốn thì họ tự hỏi thêm, và nếu mình muốn nâng cấp hoặc có giải pháp tốt hơn những bài trả lời của người khác thì làm như ongke0711 ở bài #7 hoặc dangvandang ở bài #9 và HeSanbi ở bài #11.
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ọ.

Cái chỗ tôi tô đỏ là bạn nói trên quan điểm một thành viên hay là lời cảnh báo của Ban Quản Trị?
Với quyền hạn của một MOD như tôi, tôi chỉ thực hiện những việc dưới đây;

1) Nếu tôi mang danh nghĩa BQT thì tôi sẽ nhắc nhở thành viên trên danh nghĩa BQT và trích các điều khoản của Nội quy về hành vi vi phạm của người đó.

2) Hoặc tôi sẽ xóa bài mang tính chất SPAM, QUẢNG CÁO... hoặc xóa các bài nhảm nhí vô bổ, chat chit, "xàm xí đú", hoặc những bài trả lời vô thưởng vô phạt để được tăng số lượng bài. Chỉ vậy thôi.

Từ (1) và (2) suy ra với bài trả lời của tôi chỉ mang tính chất trao đổi giữa một thành viên với một/nhiều thành viên khác mà thôi, không đại diện BQT mà nhắc nhở.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom