Lập trình với các sự kiện của bàn phím

  • Thread starter xthud4
  • Ngày gửi
Liên hệ QC
X

xthud4

Guest
Em là dân mới vào nghề, rất mong muốn được sự giúp đỡ của diễn đàn. Khi dùng VBA em muốn thực hiện một thủ tục khi có sự kiện ấn một phím nào đó trên bàn phím thì làm như thế nào vậy?
 
Bạn có thể đặt vào event Keydown, keyup để lấy keycode. Trước tiên xóa bỏ tác vụ của nút bằng lệnh Cancel event=True. Từ keycode bạn xác định được nút nào đã nhấn và bạn sử lý theo ý bạn.
Riêng trong VBA không nên sử lý bằng sự kiện KeyPress vì khi là các phím ký tự thì nó cho mã KeyAscii nhưng các phím tác vụ sẽ không cho mã KeyAscii và lại chỉ thực hiện tác vụ.
 
Upvote 0
Em là dân mới vào nghề, rất mong muốn được sự giúp đỡ của diễn đàn. Khi dùng VBA em muốn thực hiện một thủ tục khi có sự kiện ấn một phím nào đó trên bàn phím thì làm như thế nào vậy?
Bạn sử dụng lệnh
PHP:
Application.OnKey(Key, Procedure)
TDN
 
Upvote 0
Muốn dùng sự kiện nhấn phím để chạy lệnh thì bạn có thể làm theo cách sau.
Tạo Form. Rồi thêm sự kiện nhấn phím vào trong code. Nếu Form có button thì thêm code sau:
PHP:
Private Sub CommandButton1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
MsgBox (KeyAscii)
End Sub
Ở đây sau khi bạn thêm code trên thì khi chạy Form bạn nhấn 1 phím trên bàn phím sẽ có thông báo hiện ra mã số của phím đó.
Nếu bạn đã biết mã số rồi thì thay đoạn thông báo bằng 1 hàm IF, kiểu như vầy:
PHP:
Private Sub CommandButton1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
IF KeyAscii = 27 Then MsgBox ("Ban muon Esc, a!")
End Sub
Ở đây số 27 là tương ứng với việc nhấn phím Esc đó.
Bạn có thể xem tất cả số hiệu và phím tắt trong mục Help của VBA.
Bạn nhấn vào biểu tượng hình dấu hỏi trên thanh công cụ. Rồi nhập vào chữ Key Ascii, nó sẽ đưa ra và trang. Bạn nhấp chọn vào liên kết "Keycode Constants (Visual Basic for Applications)" sẽ hiện ra tất cả mã số và phím liên quan.
Thân.
 
Upvote 0
Ý của em là sự kiện nhấm phím đối với một Sheet của Excel mà không phải của một Form. Chẳng hạn khi dùng phím Delete để xóa dữ liệu trong ô A1 thì sẽ thực hiện được thủ tục hiện một lời cảnh báo chẳng hạn....
 
Upvote 0
Ý của em là sự kiện nhấm phím đối với một Sheet của Excel mà không phải của một Form. Chẳng hạn khi dùng phím Delete để xóa dữ liệu trong ô A1 thì sẽ thực hiện được thủ tục hiện một lời cảnh báo chẳng hạn....


Thế thì như ThuNghi chỉ bạn dụng sự kiện OnKey đi

Application.OnKey (Key As Sring, [Procedure])

Xem kỹ chủ đề này đặc biệt bài #6 -#7, bạn sẽ hiểu, và XD ứng dụng cho riêng bạn

http://www.giaiphapexcel.com/forum/showthread.php?t=10509

Goodluck
 
Upvote 0
Các bác làm ơn giúp em vô hiệu hóa nút Delete trong sự kiện Worksheet_Change như sau:
Private Sub Worksheet_Change (Byval Target as Range)
MsgBox("kgksdgffkâks")
End Sub

Em muốn khi sử dụng nút Delete trong bảng Excel thi thủ tục trong sự kiện trên không được thực hiện. Mong được sự giúp đỡ của các bác! Cám ơn nhiều!
 
Upvote 0
Các bác làm ơn giúp em vô hiệu hóa nút Delete trong sự kiện Worksheet_Change như sau:
Private Sub Worksheet_Change (Byval Target as Range)
MsgBox("kgksdgffkâks")
End Sub

Em muốn khi sử dụng nút Delete trong bảng Excel thi thủ tục trong sự kiện trên không được thực hiện. Mong được sự giúp đỡ của các bác! Cám ơn nhiều!
Mình nghĩ không ai dùng lệnh Onkey trong sự kiện Worksheet_Change cả. Vì mỗi khi selection change thì nó lại Onkey, trong khi đó lệnh Onkey chỉ cần chạy 1 lần.

Theo mình, bạn nên dùng Onkey để vô hiệu hoá nút Del trong sự kiện Worksheet_Activate và cũng dùng Onkey để trả phím Del về như cũ trong sự kiện Worksheet_Deactivate.

TDN
 
Upvote 0
Ý của em là sự kiện nhấm phím đối với một Sheet của Excel mà không phải của một Form. Chẳng hạn khi dùng phím Delete để xóa dữ liệu trong ô A1 thì sẽ thực hiện được thủ tục hiện một lời cảnh báo chẳng hạn....
Anh/ chị tìm được câu trả lời của ý này chưa. Chỉ em với ạ
 
Upvote 0
Anh/ chị tìm được câu trả lời của ý này chưa. Chỉ em với ạ
Bạn thêm code này và sự kiện Workbook_Open hoặc Worksheet_Activate
Mã:
Private Sub Workbook_Open()
    Application.OnKey "{DEL}", "dele"
End Sub

Và code này vào module
Mã:
Sub dele()
    MsgBox "nguy hiem the"
End Sub
 
Upvote 0
Bạn thêm code này và sự kiện Workbook_Open hoặc Worksheet_Activate
Mã:
Private Sub Workbook_Open()
    Application.OnKey "{DEL}", "dele"
End Sub

Và code này vào module
Mã:
Sub dele()
    MsgBox "nguy hiem the"
End Sub
Em muốn thực hiện nó trên sự kiện Change của worksheet nhưng khi gõ phím del thì nó không thực hiện sự kiện đó
Bài đã được tự động gộp:

Em muốn thực hiện nó trên sự kiện Change của worksheet nhưng khi gõ phím del thì nó không thực hiện sự kiện đó
Có một kiểu biến gì mà nó phát hiện ra phím gõ trên bàn phím không anh?
 
Upvote 0
Em muốn thực hiện nó trên sự kiện Change của worksheet nhưng khi gõ phím del thì nó không thực hiện sự kiện đó
Bài đã được tự động gộp:


Có một kiểu biến gì mà nó phát hiện ra phím gõ trên bàn phím không anh?
Cái bài này bạn hỏi, đâu có liên quan gì đến bài bên kia? Bạn hỏi là tại cột B nếu xóa 1 ô ở trên thì ô liền kề bên dưới xóa theo đúng không? Tôi cho bạn giải pháp.

Mã:
Private prvstrRangeName As String, prvstrValue As String
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ExitSub
    If Target.Column <> 2 Then Exit Sub
    If prvstrRangeName > "" Then
        If Target.Count = 1 And Target.Value = "" And prvstrValue > "" Then
            Application.EnableEvents = False
            Range(prvstrRangeName).Offset(1).Value = ""
            Application.EnableEvents = True
        End If
    End If
ExitSub:
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column <> 2 Then Exit Sub
    If Target.Count = 1 Then
        prvstrRangeName = Target.Address
        prvstrValue = Target.Value
    Else
        prvstrRangeName = ""
        prvstrValue = ""
    End If
End Sub

Thử kiểm tra nhé.
 

File đính kèm

  • Xoa.xlsm
    14 KB · Đọc: 11
Upvote 0
Web KT

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

Back
Top Bottom