Mình gà VBA lắm, nhờ các bác chỉ giúp cách tắt Worksheet_SelectionChange

Liên hệ QC

bebo021999

Thành viên gạo cội
Tham gia
26/1/11
Bài viết
5,924
Được thích
8,706
Giới tính
Nam
Nghề nghiệp
GPE
Mình đang viết thử cái code này, để giúp cho 1 người đang hỏi:
Tại vùng A1:A3, khi mình chọn bất kỳ ô nào (không trống ) thì ô bên cạnh (cột B) sẽ thay đổi màu nền liên tục, từ trắng sang vàng, chu kỳ 1s.
PHP:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i&
If Intersect(Target, Range("A1:A3")) Is Nothing Or IsEmpty(Target) Or Target.Count > 1 Then Exit Sub
With Target.Offset(0, 1).Interior
    Do
        .color = xlNone
        Application.Wait (Now + TimeValue("0:00:01"))
        .color = vbYellow
        Application.Wait (Now + TimeValue("0:00:01"))
        i = i + 1
    Loop Until i = 10
End With
End Sub
Vấn đề là: Khi đang trong vòng lặp Do, mình không thể thoát ra bằng cách chọn ô khác, mà phải chờ đến khi i=10 (nhấp nháy đủ 10 lần).
Mình đang tạm để vòng lặp là 10 lần. Vì không thoát được ra ngoài Do nên tránh việc bị treo.
Câu hỏi là: Làm sao để chuyển qua select ô khác trong khi vòng lặp Do đang hoạt động.
Xin cảm ơn.
 
Bác tận dụng cài đặt sự kiện DoEvents
 
Upvote 0
Sao thành viên gạo cội mà đặt tiêu đề như vậy nhỉ. !!!!!
Em nghĩ năm đó đi search google thì tìm được GPE, tiện tay tạo tài khoản rồi đăng cái mình cần.
Kể từ đó đến nay, cứ cần là vô đăng bài, hỏi xong rồi lại "biệt tâm".
Theo thời gian thì được danh hiệu này.
 
Upvote 0
Bác tận dụng cài đặt sự kiện DoEvents
Cụ thể thế nào bạn?
Cho DoEvents vào bên trong Do...Loop hay sao bạn?
Nếu vậy thì khi chọn A1, sau đó chọn A2 thì ô B1 vẫn nhấp nháy, đúng ra sự kiện selection phải chuyển qua A2 để B2 nhấp nháy.
 
Upvote 0
DoEvents ứng dụng cho lập trình nâng cao. Một người biết VBA ở mức căn bản sẽ không bao giờ biết cách sử dụng cài đặt này.


JavaScript:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static b as boolean
Dim i&, t!
If Intersect(Target, Range("A1:A3")) Is Nothing Or IsEmpty(Target) Or Target.Address <> Target(1, 1).MergeArea.Address Then Exit Sub
b = False: b = True
With Target.Offset(0, 1).Interior
    Do While i < 10 And b
         DoEvents
        .color = xlNone
        gosub time
        .color = vbYellow
        gosub time
        i = i + 1
    Loop
End With
B = False
Exit sub:
time:
   t = Timer + 1
   Do While Timer < t
       DoEvents
       If Not b then exit sub
   Loop
return
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
DoEvents ứng dụng cho lập trình nâng cao. Một người biết VBA ở mức căn bản sẽ không bao giờ biết cách sử dụng cài đặt này.
Khi mình chọn ô A1, sau đó chọn tiếp ô khác bên ngoài vùng A1:A3, thì ô B1 vẫn nhấp nháy, khi nào đạt i=10 mới thôi.
 
Upvote 0
Web KT

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

Back
Top Bottom