Tìm hiểu về thủ tục sự kiện

Liên hệ QC

tranan76

Thành viên mới
Tham gia
9/12/06
Bài viết
33
Được thích
2
Làm sao để Double-click vào một ô thì chạy macro?

Làm sao để Double-click vào một ô thì chạy macro? Lần trước đã đọc trên diễn đàn mà không thể nào tìm lại được, nhờ các bạn giúp tìm lại với. Thanks
 
Chỉnh sửa lần cuối bởi điều hành viên:
Fải chuột vô thanh SheetName

Tiếp đó chọn dòng cuối;
Chọn mục WorkSheet tại CS bên trái;
Chọn mục BeforeDoublick ở CS bên fải
nhật vô đó 2 dòng lệnh:
1 MsgBox "No Day Roi!"
2 XXXYYYZZZ 'XXXYYYZZZ là tên Macro mà bạn muốn chạy khi nhấn đúp 1 ô
@$@!^%
Cụ thể:
Mã:
[b]Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) [/b]
1    MsgBox "No Day Roi!"
2     XXXYYYZZZ
[b]End Sub[/b]
 
Cám ơn bạn thật nhiều
 
SA_DQ đã viết:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub

Anh SA_DQ cho em hỏi
Tại sao phải khai báo Cancel as boolean và áp dụng nó trong trường hợp nào?
Em thấy tất một số file trên 4R có sử dụng nhưng em không thể hiểu được?
Nhờ anh giải thích giúp.
Cám ơn Anh!
 
KEN đã viết:
Anh cho em hỏi
Tại sao phải khai báo Cancel as boolean và áp dụng nó trong trường hợp nào?
Em thấy tất một số file trên 4R có sử dụng nhưng em không thể hiểu được?
1: Bạn vô ô tìm kiếm của diễn đàn này hay ~ diễn đàn tương tự & nhập 'DoubleClick' thử xem có bài nào cho bạn rõ hơn chăng;
2: /)/ếu chưa thõa mãn nên vô hỏi BG
-+*/
Riêng mình thấy cái này là từ trên trời rơi xuống!
 
KEN đã viết:
Anh SA_DQ cho em hỏi
Tại sao phải khai báo Cancel as boolean và áp dụng nó trong trường hợp nào?
Em thấy tất một số file trên 4R có sử dụng nhưng em không thể hiểu được?
Nhờ anh giải thích giúp.
Cám ơn Anh!
Cancel là biến để chỉ tình trạng của chuột khi bấm đôi. Nó là biến có 2 giá trị FALSE hoặc TRUE:
FALSE: ngầm định. Excel quy định khi bấm đôi chuột vào ô thì sẽ đưa con trỏ vào vị trí bấn chuột để chỉnh sửa nội dung.
TRUE: làm mất tác dụng của bấm đội.
Ví dụ dưới dây giúp bạn hiểu ý nghĩa của Cancel.
Khi bấm đôi chuột, nó sẽ kiểm tra ô mà chuột đang trỏ vào có dữ liệu không.
- Nếu có, không cho con trỏ đặt vào ô (tránh chỉnh sửa nội dung).
- Nếu không, đưa con trỏ vào vị trí bấm chuột để chỉnh sửa nội dung

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If ActiveCell.Value <> "" Then
Cancel = True
End If
End Sub

Vì ngầm định Cancel=FALSE nên không cần phải viết:
If ActiveCell.Value <> "" Then
Cancel = True
Else
Cancel=False
End If
 
Lần chỉnh sửa cuối:
Dear all,
--------
Cũng phải nói thêm rằng, các biến trong các thủ tục sự kiện là "biến hệ thống", nghĩa là biến do hệ thống quản lý và điều khiển.
Cũng cú pháp khai báo như vậy, biến Cancel sau đây không giống như Cancel trong Private Sub Workbook_BeforeClose(Cancel As Boolean):
Mã:
Sub MyBook_Close(Cancel as Boolean)
If MsgBox("Do you want to exit?", vbYesNo + vbQuestion) = vbNo Then Cancel = True
End Sub
vì đơn giản MyBook_Close không phải là thủ tục sự kiện - không phải thủ tục mà do hệ thống quản lý.
Thế nào là thủ tục sự kiện?
Chúng ta hiểu các "sự kiện" như là các phương thức của một lớp đối tượng đã được lập trình sẵn. Chẳng hạn, lớp đối tượng Worksheet có các sự kiện cơ bản sau:
- Activate
- BeforeDoubleClick
- BeforeRightClick
- Calculate
- Change
- Deactivate
- FollowHyperlink
- PivotTableUpdate
- SelectionChange
Tương ứng với mỗi sự kiện đó là một thủ tực sự kiện (tên thủ tục là kết hợp <Tên đối tượng>_<Tên sự kiện> bởi dấu _). Đặc biệt các khai báo thủ tục là do hệ thống phát sinh, người lập trình không được thay đổi cú pháp cũng như tất cả những khai báo đó.
Để hiểu rõ hơn về cách mà hệ thống quản lý các biến trong thủ tục sự kiện như thế nào, hãy so sánh thủ tục MyBook_Close nêu trên với thủ tục Private Sub Workbook_BeforeClose(Cancel As Boolean) với cùng một dòng lệnh như nhau:
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("Do you want to exit?", vbYesNo + vbQuestion) = vbNo Then Cancel = True
End Sub
Hiểu được các sự kiện và "cơ chế vận hành" của nó là một thuận lợi trong lập trình VBA!
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom