Hòi về EnableEvent

Liên hệ QC

nhapmon

Thành viên tích cực
Tham gia
31/10/07
Bài viết
1,179
Được thích
879
Good morning cả nhà, xin cả nhà giúp giải thích dùm tôi về cái lệnh EnableEvents.
thông thường tôi thấy người ta hay sử dụng lệnh này trong các sự kiện.

On Error GoTo ErrHandler
Application.EnableEvents = False

------------------------------

ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True

nhưng tôi có một số điều thắc mắc:
1- nó có phải là bẩy lổi ko (dạng như on error resume next)
2-khi trong đoạn có lỗi xảy ra thì nó thực hiện 2 lệnh của cái này ErrHandler:phải ko?
tức là khi đó nó set lại enableevent=true
3- vậy khi trong đoạn code của mình ko có lỗi thì nó không thực hiện lại cái lệnh set lại trên, mà vẫn giữa lại Application.EnableEvents = False. thực tế khi nó chạy thì nó vẫn EnableEvents = true. vì vậy, tôi cứ thắc mắc hoài

nhờ mọi người giải thích dùm
tks
 
Good morning cả nhà, xin cả nhà giúp giải thích dùm tôi về cái lệnh EnableEvents.
thông thường tôi thấy người ta hay sử dụng lệnh này trong các sự kiện.



nhưng tôi có một số điều thắc mắc:
1- nó có phải là bẩy lổi ko (dạng như on error resume next)
2-khi trong đoạn có lỗi xảy ra thì nó thực hiện 2 lệnh của cái này ErrHandler:phải ko?
tức là khi đó nó set lại enableevent=true
3- vậy khi trong đoạn code của mình ko có lỗi thì nó không thực hiện lại cái lệnh set lại trên, mà vẫn giữa lại Application.EnableEvents = False. thực tế khi nó chạy thì nó vẫn EnableEvents = true. vì vậy, tôi cứ thắc mắc hoài

nhờ mọi người giải thích dùm
tks

1. EnableEvents không phải là bẫy lỗi.
2. Khi có lỗi xảy ra thì theo code trên nó sẽ Set EnableEvents= true
3. Không có lỗi thì code vẫn chạy câu lệnh Set EnableEvents= true
Tuy nhiên code không đầy đủ nên chẳng biết rõ code bạn đặt dòng lệnh có đúng chỗ hay không.
 
Upvote 0
Good morning cả nhà, xin cả nhà giúp giải thích dùm tôi về cái lệnh EnableEvents.
thông thường tôi thấy người ta hay sử dụng lệnh này trong các sự kiện.



nhưng tôi có một số điều thắc mắc:
1- nó có phải là bẩy lổi ko (dạng như on error resume next)
2-khi trong đoạn có lỗi xảy ra thì nó thực hiện 2 lệnh của cái này ErrHandler:phải ko?
tức là khi đó nó set lại enableevent=true
3- vậy khi trong đoạn code của mình ko có lỗi thì nó không thực hiện lại cái lệnh set lại trên, mà vẫn giữa lại Application.EnableEvents = False. thực tế khi nó chạy thì nó vẫn EnableEvents = true. vì vậy, tôi cứ thắc mắc hoài

nhờ mọi người giải thích dùm
tks
Application.EnableEvents = False giống như "tôi bận rồi không tiếp kháck (không giải quyết sự kiện gì) nữa".

On Error GoTo ErrHandler: Nếu gặp lỗi thì nó nhảy nhanh xuống các dòng lệnh dưới ErrHandler:; còn nếu không lỗi nó cũng vẫn thực hiện hết tất cả các lệnh cho tới khi End Sub.
 
Lần chỉnh sửa cuối:
Upvote 0
Good morning cả nhà, xin cả nhà giúp giải thích dùm tôi về cái lệnh EnableEvents.
thông thường tôi thấy người ta hay sử dụng lệnh này trong các sự kiện.



nhưng tôi có một số điều thắc mắc:
1- nó có phải là bẩy lổi ko (dạng như on error resume next)
2-khi trong đoạn có lỗi xảy ra thì nó thực hiện 2 lệnh của cái này ErrHandler:phải ko?
tức là khi đó nó set lại enableevent=true
3- vậy khi trong đoạn code của mình ko có lỗi thì nó không thực hiện lại cái lệnh set lại trên, mà vẫn giữa lại Application.EnableEvents = False. thực tế khi nó chạy thì nó vẫn EnableEvents = true. vì vậy, tôi cứ thắc mắc hoài

nhờ mọi người giải thích dùm
tks
Application.EnableEvents thường dùng cho các sự kiện, tiêu biểu là sự kiện WorksheetChange
Ví dụ:
- Bạn muốn nhập số 1 vào cell A1 thì lập tức A1 biến thành 10 (chẳng hạn). Hay nói đúng hơn là bạn muốn kết quả = 10 lần giá trị nhập
- Trường hợp này ta dùng sự kiện WorksheetChange với Target = Range("A1")
- Code viết cũng đơn giản, kiểu như Target = Target*10 (đúng chứ?)
- Thế nhưng ngay khi ta gõ số 1 thì code biến số 1 thành số 10 (bằng phép nhân), đồng thời nó cũng nhận biết được có sự thay đổi trên cell A1 nên code lại chạy và lại biến số 10 thành số 100 (nhân 10 tiếp) ---> Cứ thế chẳng biết đến khi nào mới dừng
-----------------
Vậy: Đối với trường hợp dùng sự kiện WorksheetChange thực hiện thay đổi ngay tại Target (là cell ta nhập) thì BẮT BUỘC phải có cặp Application.EnableEvents = FALSE ở đầu code và Application.EnableEvents = TRUE ở cuối code. Mục đích để "bắt" sự kiện change 1 lần duy nhất ---> Nhập số 1, biến thành 10 rồi thôi (hổng nhân nữa)
----------------
Còn cái vụ On Error.. gì gì đó mới là bẫy lỗi và cũng chẳng liên quan gì đến Application.EnableEvents
 
Upvote 0
Application.EnableEvents thường dùng cho các sự kiện, tiêu biểu là sự kiện WorksheetChange
Ví dụ:
- Bạn muốn nhập số 1 vào cell A1 thì lập tức A1 biến thành 10 (chẳng hạn). Hay nói đúng hơn là bạn muốn kết quả = 10 lần giá trị nhập
- Trường hợp này ta dùng sự kiện WorksheetChange với Target = Range("A1")
- Code viết cũng đơn giản, kiểu như Target = Target*10 (đúng chứ?)
- Thế nhưng ngay khi ta gõ số 1 thì code biến số 1 thành số 10 (bằng phép nhân), đồng thời nó cũng nhận biết được có sự thay đổi trên cell A1 nên code lại chạy và lại biến số 10 thành số 100 (nhân 10 tiếp) ---> Cứ thế chẳng biết đến khi nào mới dừng
-----------------
Vậy: Đối với trường hợp dùng sự kiện WorksheetChange thực hiện thay đổi ngay tại Target (là cell ta nhập) thì BẮT BUỘC phải có cặp Application.EnableEvents = FALSE ở đầu code và Application.EnableEvents = TRUE ở cuối code. Mục đích để "bắt" sự kiện change 1 lần duy nhất ---> Nhập số 1, biến thành 10 rồi thôi (hổng nhân nữa)
----------------
Còn cái vụ On Error.. gì gì đó mới là bẫy lỗi và cũng chẳng liên quan gì đến Application.EnableEvents
Nếu mình muốn viết một sự kiện WorksheetChange để khi nhập vào 01022020 thì ô đó sẽ tự nhảy ra là ngày 01/02/2020 thì làm như thế nào ạ, e đang còn mơ hồ về worksheetchange, dọc tài liệu nhưng không hieur lắm ạ.
 
Upvote 0
Nếu mình muốn viết một sự kiện WorksheetChange để khi nhập vào 01022020 thì ô đó sẽ tự nhảy ra là ngày 01/02/2020 thì làm như thế nào ạ, e đang còn mơ hồ về worksheetchange, dọc tài liệu nhưng không hieur lắm ạ.
Yêu cầu của bạn tưởng đơn giản nhưng cũng phải dùng cả sự kiện SelectionChange và Change mới được. Bạn chép mấy dòng này trong sheet code rồi thử nhập ngày tại A2 xem:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$2" Then
        Target.NumberFormat = "@"
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ngay As Date
    If Target.Address = "$A$2" Then
        Application.EnableEvents = False
        ngay = Mid(Target, 1, 2) & "/" & Mid(Target, 3, 2) & "/" & Mid(Target, 5)
        Target.NumberFormat = "dd/mm/yyyy"
        Target = ngay
        Application.EnableEvents = True
    End If

End Sub
 
Upvote 0
Yêu cầu của bạn tưởng đơn giản nhưng cũng phải dùng cả sự kiện SelectionChange và Change mới được. Bạn chép mấy dòng này trong sheet code rồi thử nhập ngày tại A2 xem:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$2" Then
        Target.NumberFormat = "@"
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ngay As Date
    If Target.Address = "$A$2" Then
        Application.EnableEvents = False
        ngay = Mid(Target, 1, 2) & "/" & Mid(Target, 3, 2) & "/" & Mid(Target, 5)
        Target.NumberFormat = "dd/mm/yyyy"
        Target = ngay
        Application.EnableEvents = True
    End If

End Sub
Thế nhỡ sau khi nhập đâu đó xong xuôi hết rồi tôi "lỡ tay" chọn vào ô A2 thì sao?
 
Upvote 0
Yêu cầu của bạn tưởng đơn giản nhưng cũng phải dùng cả sự kiện SelectionChange và Change mới được. Bạn chép mấy dòng này trong sheet code rồi thử nhập ngày tại A2 xem:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$2" Then
        Target.NumberFormat = "@"
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ngay As Date
    If Target.Address = "$A$2" Then
        Application.EnableEvents = False
        ngay = Mid(Target, 1, 2) & "/" & Mid(Target, 3, 2) & "/" & Mid(Target, 5)
        Target.NumberFormat = "dd/mm/yyyy"
        Target = ngay
        Application.EnableEvents = True
    End If

End Sub
bạn ơi mình chạy nó không ra ý.
Bài đã được tự động gộp:

bạn ơi mình chạy nó không ra ý.
Thế nhỡ sau khi nhập đâu đó xong xuôi hết rồi tôi "lỡ tay" chọn vào ô A2 thì sao?
 

File đính kèm

  • Capture.JPG
    Capture.JPG
    58.8 KB · Đọc: 18
Upvote 0
bạn ơi mình chạy nó không ra ý.
Bài đã được tự động gộp:
Bạn bị false 1 lúc nào đó của Application.EnableEvents rồi

Chừ làm riêng 1 sub chỉ có 1 dòng này thôi rồi chạy nó để bật nó lên
Application.EnableEvents = True
 
Upvote 0
Web KT

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

Back
Top Bottom