Làm sao để code chỉ chạy trên File có code

Liên hệ QC

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Chào cả nhà GPE. em có làm làm đoạn code sau để không cho người dùng Ctrl + V vào file excel . Bình thường khi em mở 1 file này thì code chạy OK. Nhưng khi em mở tiếp 1 file excel khác không có code này thì lại không Ctrr + V được ( đáng lý ra vẩn Ctrl + V bình thường. Chỉ có file có code mới áp dụng chứ. Tại sao file khác Ctrl + V cũng không được ). Xin chân thành cảm ơn = Xin chân thành cảm ơn + X ( X mình sẽ công bố sau )
Mã:
Private Sub Worksheet_Deactivate()
Application.OnKey "^v"
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.OnKey "^v", ""
End Sub
 
Bạn tạo 1 Module:
Với Code: Public AppClass As New clsEvent

1 Class Module với tên clsEvent:

PHP:
Option Explicit
Public WithEvents App As Application
Private Sub App_WorkbookActivate(ByVal Wb As Excel.Workbook)
  If Wb Is ThisWorkbook Then
    App.OnKey "^v", ""
  Else
    App.OnKey "^v"
  End If
End Sub

và copy đoạn code sau vào Code workbook:

PHP:
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
  Set AppClass.App = Application
End Sub
Private Sub Workbook_Open()
  Set AppClass.App = Application
End Sub

Sau đó ấn Save là code tự động hoạt động.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tạo 1 Module:
Với Code: Public AppClass As clsEvent

1 Class Module với tên clsEvent:

PHP:
Option Explicit
Public WithEvents App As Application
Private Sub App_WorkbookActivate(ByVal Wb As Excel.Workbook)
  If Wb Is ThisWorkbook Then
    App.OnKey "^v", ""
  Else
    App.OnKey "^v"
  End If
End Sub

và copy đoạn code sau vào Code workbook:

PHP:
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
  Set AppClass.App = Application
End Sub
Private Sub Workbook_Open()
  Set AppClass.App = Application
End Sub

Sau đó ấn Save là code tự động hoạt động.
Nhìn
Private Sub Worksheet_Deactivate()
Application.OnKey "^v"
End Sub
Tôi suy ra là người ta chỉ chặn 1 sheet thôi (sheet có code). Code của bạn chặn tất cả các sheet trong book.
----
Bạn tạo 1 Module:
Với Code: Public AppClass As clsEvent
Có lẽ là
Mã:
Public AppClass As New clsEvent
Vì nếu không có New thì có lỗi tại
Mã:
Set AppClass.App = Application
do AppClass chưa được khởi tạo.

Code chưa chuẩn. Ta mở tập tin. Không dùng được Ctrl + V. Bây giở mở tập tin mới. Dùng được Ctrl + V trong tập tin thứ 2. Trở về tập tin 1 và đóng nó. Còn lại tập tin thứ 2. Bây giờ không dùng được Ctrl + V nữa.

Tập tin không có code có thể mở trước tập tin có code và khi đóng tập tin có code thì tập tin còn lại cũng không dùng được Ctrl + V.
---------
Test kỹ thử xem. Vì thường trong cuộc sống lỗi của người khác nó luôn như con voi còn lỗi của bản thân nó như con kiến khó nhìn thấy (người trong cuộc khó nhìn thấy những vấn đề mà người ngoài cuộc nhìn thấy rõ mồn một).

Code trong ThisWorkbook, Module1 và clsEvents. Sheet cấm Ctrl + V tên là "Sheet1". Tự sửa tên cho phù hợp.

Tôi theo trường phái mà theo đó mọi trường dữ liệu của đối tượng đều là Private. Việc truy cập tới resource của đối tượng luôn thông qua phương thức hoặc các procedure Get/Let/Set.

Nếu muốn chặn tất cả các sheet thì xóa
Mã:
Private Sub ExcelApp_SheetActivate(ByVal Sh As Object)
    If Sh.Parent.Name = ThisWorkbook.Name And Sh.Name = "Sheet1" Then
        ExcelApp.OnKey "^v", ""
    Else
        ExcelApp.OnKey "^v"
    End If
End Sub

và

And Wb.ActiveSheet.Name = "Sheet1"

Đúng theo yêu cầu code chỉ chặn Ctrl + V chứ không chặn khi chọn Paste từ Ribbon.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom