Làm sao Application.OnKey chỉ có trong sheet đã có code (1 người xem)

Liên hệ QC

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

congnguyen88

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
22/7/14
Bài viết
355
Được thích
31
Làm sao Application.OnKey chỉ hoạt động trong sheet đã có code

Xin chào các anh chị trên diễn đàn. Tình hình là nhà mình có 1 file Excel, mình đã viết code cho file Excel này với chức năng là khi bấm vào phím F1 thì sẽ xóa 1 vùng

Code tại module :

Sub XOA()
If MsgBox("Co chac chan xoa khong", 4) = 6 Then
Sheets("sheet1").Range("D5:I19").ClearContents
End If
End Sub

và Code trong sheet1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.OnKey "{F1}", "xoa"
End Sub

Mình muốn chỉ khi nào đang ở trong Sheet1 nếu nhấn F1 thì code mới chạy, nhưng sao mình sang sheet 2, sheet 3 nếu nhấn F1 thì code vẫn chạy. Có cách nào chỉ cho code chạy khi đang ở trong sheet1 không. Mong mọi người cố gắng trả lời mình sớm, cảm ơn mọi người trước
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn sửa Sub Xoa() thành
Mã:
Sub XOA()
[/FONT][/COLOR][COLOR=#000000][FONT=Verdana]If Activesheet.Name="Sheet1" Then
If MsgBox("Co chac chan xoa khong", 4) = 6 Then[/FONT][/COLOR]
[COLOR=#000000][FONT=Verdana]Range("D5:I19").ClearContents[/FONT][/COLOR]
[COLOR=#000000][FONT=Verdana]End If
[/FONT][/COLOR][FONT=Verdana]End If[/FONT]
[COLOR=#000000][FONT=Verdana]End Sub[/FONT][/COLOR]
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các anh chị trên diễn đàn. Tình hình là nhà mình có 1 file Excel, mình đã viết code cho file Excel này với chức năng là khi bấm vào phím F1 thì sẽ xóa 1 vùng

Code tại module :

Sub XOA()
If MsgBox("Co chac chan xoa khong", 4) = 6 Then
Sheets("sheet1").Range("D5:I19").ClearContents
End If
End Sub

và Code trong sheet1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.OnKey "{F1}", "xoa"
End Sub

Mình muốn chỉ khi nào đang ở trong Sheet1 nếu nhấn F1 thì code mới chạy, nhưng sao mình sang sheet 2, sheet 3 nếu nhấn F1 thì code vẫn chạy. Có cách nào chỉ cho code chạy khi đang ở trong sheet1 không. Mong mọi người cố gắng trả lời mình sớm, cảm ơn mọi người trước
Cho cái này vào sheet1 luôn nha
Về nguyên tắc là phải trả về nguyên thủy khi đóng file nữa mới đúng
Nhìn tổng quát thì thấy nó sao sao ấy.
PHP:
Private Sub Worksheet_Deactivate()
Application.OnKey "{F1}"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các anh chị trên diễn đàn. Tình hình là nhà mình có 1 file Excel, mình đã viết code cho file Excel này với chức năng là khi bấm vào phím F1 thì sẽ xóa 1 vùng

Code tại module :

Sub XOA()
If MsgBox("Co chac chan xoa khong", 4) = 6 Then
Sheets("sheet1").Range("D5:I19").ClearContents
End If
End Sub

và Code trong sheet1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.OnKey "{F1}", "xoa"
End Sub

Mình muốn chỉ khi nào đang ở trong Sheet1 nếu nhấn F1 thì code mới chạy, nhưng sao mình sang sheet 2, sheet 3 nếu nhấn F1 thì code vẫn chạy. Có cách nào chỉ cho code chạy khi đang ở trong sheet1 không. Mong mọi người cố gắng trả lời mình sớm, cảm ơn mọi người trước

Bạn thử sửa code của Sub XOA thành như thế này xem sao:

Mã:
Sub XOA()
[COLOR=#0000ff]    If ActiveSheet.Name = "Sheet1" Then[/COLOR]
        If MsgBox("Co chac chan xoa khong", 4) = 6 Then
            Sheets("sheet1").Range("D5:I19").ClearContents
        End If
[COLOR=#0000ff]    End If[/COLOR]
End Sub
 
Upvote 0
Cho cái này vào sheet1 luôn nha
Về nguyên tắc là phải trả về nguyên thủy khi đóng file nữa mới đúng
PHP:
Private Sub Worksheet_Deactivate()
Application.OnKey "{F1}"
End Sub
Đúng như vậy! Lẽ ra phải như thế này:

Mã:
Private Sub [COLOR=#ff0000]Worksheet_Activate[/COLOR]()
    Application.OnKey "{F1}", "xoa"
End Sub


Private Sub Worksheet_Deactivate()
    Application.OnKey "{F1}"
End Sub

Thay vì dùng Worksheet_SelectionChange!
 
Upvote 0
Để trả phím F1 về nguyên thuỷ khi đóng file thì dùng
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Onkey "{F1}"
End Sub
 
Upvote 0
Hoặc giữ lại code của bạn thì nên viết thế này
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Not Intersect(Target, [D5:I19]) Is Nothing Then
      Application.OnKey "{F1}", "xoa"
   Else
      Application.OnKey "{F1}"
   End If
End Sub
 
Upvote 0
Để trả phím F1 về nguyên thuỷ khi đóng file thì dùng
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Onkey "{F1}"
End Sub
Thật ra nếu bạn dùng OnKey cho một phím nào đó suốt cả quá trình bạn dùng Excel thì OK, bạn nên "SET" lại Key cho đúng chuẩn khi không dùng nữa (đóng file). Còn trường hợp của topic này thì nên Set lại Key sau khi qua sheet khác là hợp lý. Nói thiệt, tôi chả mặn mòi gì với thủ tục OnKey này! Đã làm VBA rồi thì dùng nút lệnh cho trực quan sinh động!

=======================

Ai chà, anh í đã 4 sao cứng ngắc rồi í!
 

File đính kèm

  • QH.jpg
    QH.jpg
    15.2 KB · Đọc: 31
Upvote 0
Mình không muốn thay đổi quá nhiều code nguyên thủy của chủ topic, vì làm như thế sẽ làm nản lòng chiến sĩ.
Cứ giữ nguyên trạng thái ban đầu mà sửa lại code xóa vầy cũng tạm ok
Nói chung cách thì có nhiều lắm, cứ từ từ sẽ ngộ ra cái nào là đúng nhất và phù hợp nhất
PHP:
Sub XOA()
If MsgBox("Co chac chan xoa khong", 4) = 6 Then
   Sheets("sheet1").Range("D5:I19").ClearContents
   Application.OnKey "{F1}"
End If
End Sub
 
Upvote 0
Thật ra nếu bạn dùng OnKey cho một phím nào đó suốt cả quá trình bạn dùng Excel thì OK, bạn nên "SET" lại Key cho đúng chuẩn khi không dùng nữa (đóng file). Còn trường hợp của topic này thì nên Set lại Key sau khi qua sheet khác là hợp lý. Nói thiệt, tôi chả mặn mòi gì với thủ tục OnKey này! Đã làm VBA rồi thì dùng nút lệnh cho trực quan sinh động!

=======================

Ai chà, anh í đã 4 sao cứng ngắc rồi í!
Nếu không trả F1 về vị trí cũ mà đóng file luôn khi sheet1 active thì khi mở file excel bất kỳ khác Onkey vẫn chạy và tự động Open file ở đề bài lên. Dùng Workbook_beforeclose để xóa thủ tục Onkey sẽ giải quyết được chuyện này.
 
Upvote 0
Nếu không trả F1 về vị trí cũ mà đóng file luôn khi sheet1 active thì khi mở file excel bất kỳ khác Onkey vẫn chạy và tự động Open file ở đề bài lên. Dùng Workbook_beforeclose để xóa thủ tục Onkey sẽ giải quyết được chuyện này.
Sau khi thoát file, tôi nghĩ, máy nó tự động set lại phím chức năng nên không có vấn đề gì đâu bạn ơi. Bạn thử chưa nhỉ?
 
Upvote 0
Sau khi thoát file, tôi nghĩ, máy nó tự động set lại phím chức năng nên không có vấn đề gì đâu bạn ơi. Bạn thử chưa nhỉ?
Mình nhầm (mà có lẽ máy chạy lâu quá nên bị tẩu hỏa nhập ma) khi mở 2 file đề bài cùng file khác thì đóng file đề bài thủ tục vẫn chạy, tự động mở lại file đề bài.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình thử rồi, chỉ mở file đề bài, đóng excel khi đang ở sheet1, mở file khác, bấm F1, excel sẽ tự mở file đề bài và chạy thủ tục Onkey.
Ặc ặc, tôi dùng Excel 2010 và mở file, thực hiện lệnh OnKey, đóng file đó, mở lại file đó và nhấn F1, Help của Excel hiện ra!
 
Upvote 0
Bạn sửa Sub Xoa() thành
Mã:
Sub XOA()
Mã:
[COLOR=#000000][FONT=Verdana]If Activesheet.Name="Sheet1" Then
If MsgBox("Co chac chan xoa khong", 4) = 6 Then[/FONT][/COLOR]
[COLOR=#000000][FONT=Verdana]Range("D5:I19").ClearContents[/FONT][/COLOR]
[COLOR=#000000][FONT=Verdana]End If
[/FONT][/COLOR][FONT=Verdana]End If[/FONT]
[COLOR=#000000][FONT=Verdana]End Sub[/FONT][/COLOR]

Sửa code như bạn thì tốt rồi, nhưng 1 file Excel của mình có hơn 100 sheet mà khi nhấn F1 thì xóa Range("D5:I19") theo từng sheet ( nghĩa là đang ở sheet nào thì xóa Range("D5:I19") của sheet đó) , giờ mà mình sửa sheet chắc mỏi tay quá . Giờ chỉ còn 1 phương án là làm sao sửa Code trong sheet đó anh
 
Upvote 0
Người dùng đã từng nhiều năm dù có đi bốn phương trời (Bắc, Nam, Đông, Tây), dù có ở trong Windows (desktop hay thư mục) hay trong bất cứ chương trình chuyên nghiệp nào viết cho Windows thì dù có ngủ gật vẫn biết là khi cần help thì nhấn F1. Đấy là thói quen, nhiều khi đầu chưa kịp nghĩ mà tay đã nhấn rồi. Tự dưng chạy tập tin của ông nọ thì nhấn F1 nó lại ra cái quỉ quái gì đó. Bất ngờ là cái chắc. Dù có được hướng dẫn trước thì lâu lâu cái tay nó tự nhấn F1 khi cần help.

Windows dùng F1 (và nhiều Fxyz nữa) như là chuẩn (standard) để "người người" noi theo, đi đâu người ta cũng biết khi nào nên nhấn nó, tự dưng lại cắt cụt tay mình đi.
 
Upvote 0
Sửa code như bạn thì tốt rồi, nhưng 1 file Excel của mình có hơn 100 sheet mà khi nhấn F1 thì xóa Range("D5:I19") theo từng sheet ( nghĩa là đang ở sheet nào thì xóa Range("D5:I19") của sheet đó) , giờ mà mình sửa sheet chắc mỏi tay quá . Giờ chỉ còn 1 phương án là làm sao sửa Code trong sheet đó anh
Ở trước đã có dòng kiểm tra Activesheet.Name="Sheet1" rồi thì dòng Range... không cần Sheet1 nữa.
 
Upvote 0
Sau khi thoát file, tôi nghĩ, máy nó tự động set lại phím chức năng nên không có vấn đề gì đâu bạn ơi. Bạn thử chưa nhỉ?
mình thoát ra rồi bạn ak, Nó vẫn bị, Giờ chỉ còn 1 phương án là sửa Code trong Sheet ( tại vì file này mình chỉ minh họa thôi, chứ thật ra nó gồm 100 sheet mà khi nhấn F1 thì nó sẽ xóa Range("vùng xóa") theo từng sheet riêng biệt ( nghĩa là mình đang làm việc sheet nào thì khi nhấn F1 sẽ xóa vùng đó trong sheet đang làm việc )
 
Upvote 0
Cho cái này vào sheet1 luôn nha
Về nguyên tắc là phải trả về nguyên thủy khi đóng file nữa mới đúng
Nhìn tổng quát thì thấy nó sao sao ấy.
PHP:
Private Sub Worksheet_Deactivate()
Application.OnKey "{F1}"
End Sub


Cảm ơn bạn rất nhiều. mình làm được rồi
 
Upvote 0
Bạn thử sửa code của Sub XOA thành như thế này xem sao:

Mã:
Sub XOA()
[COLOR=#0000ff]    If ActiveSheet.Name = "Sheet1" Then[/COLOR]
        If MsgBox("Co chac chan xoa khong", 4) = 6 Then
            Sheets("sheet1").Range("D5:I19").ClearContents
        End If
[COLOR=#0000ff]    End If[/COLOR]
End Sub

Cảm ơn anh nhiều. nói chung cách nào em củng làm được rồi. Khâm phục các anh chị trên diễn đàn giỏi Excel quá, Em muốn họa VBA cơ bản anh có link tài liệu nào không cho em học với
 
Upvote 0
Upvote 0
Cảm ơn anh nhiều. nói chung cách nào em củng làm được rồi.

Bạn làm được, làm đúng dụng ý, chuẩn?
Bạn chỉ muốn "code chạy khi đang ở trong sheet1". Thậm chí ở cùng tập tin nhưng sheet khác thì code phải tự "rút lui". Nếu thế thì tôi hiểu là khi ở tập tin khác thì càng phải "rút lui".
Vậy bạn hãy mở thêm một tập tin nữa. Giả sử 1 tiếng trước sheet1 ở tập tin có code là activate. Trong 1 tiếng gần đây bạn làm việc với tập tin "mới". Bạn cần sử dụng help. Nhưng nhấn F1 không có help mà có "cái kia". Thậm chí bạn không cần help nhưng định làm gì đó mà nhấn nhầm F1 thì cũng có cái kia.
Vậy thì hiện thời code chưa chuẩn 100%.
Mục đích của tôi là để bạn biết và nếu muốn thì "đòi thêm", hoàn thiện thêm code mà thôi.
 
Upvote 0
Người dùng đã từng nhiều năm dù có đi bốn phương trời (Bắc, Nam, Đông, Tây), dù có ở trong Windows (desktop hay thư mục) hay trong bất cứ chương trình chuyên nghiệp nào viết cho Windows thì dù có ngủ gật vẫn biết là khi cần help thì nhấn F1. Đấy là thói quen, nhiều khi đầu chưa kịp nghĩ mà tay đã nhấn rồi. Tự dưng chạy tập tin của ông nọ thì nhấn F1 nó lại ra cái quỉ quái gì đó. Bất ngờ là cái chắc. Dù có được hướng dẫn trước thì lâu lâu cái tay nó tự nhấn F1 khi cần help.

Windows dùng F1 (và nhiều Fxyz nữa) như là chuẩn (standard) để "người người" noi theo, đi đâu người ta cũng biết khi nào nên nhấn nó, tự dưng lại cắt cụt tay mình đi.

Xe đò chạy đường trường. Có nhiều xe được trang bị lại, chân ghế ngồi hành khách được nâng lên cao hơn một khoảng, mục đích để gầm ghế trống hơn, đặt được nhiều hàng hoá, hành lý hơn.

Đối với chủ xe, đó là sáng kiến độc đáo. Thu được lợi vì chủ có thể lấy nhiều tiền hơn trên các người đi buôn lẻ, cần chất nhiều hàng.

Đối vời người thiết kế xe, đó là một thảm hoạ. Điển hình làm như thế là thay đổi trọng tâm điểm của xe, khả năng xe bị lật tăng lên một chút.

Sáng kiến độc đáo hay thảm hoạ tuỳ theo góc nhìn. Mục đích của người chủ xe là thâu lợi, tai nạn là chuyện phụ. Chỉ khi nào có luật cho cơ quan chức năng điều tra độ an toàn của xe và đưa người trách nhiệm ra toà thì chừng ấy chủ xe mới biết để ý đến an toàn.
 
Upvote 0

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

Back
Top Bottom