ngodany135
Thành viên thường trực
- Tham gia
- 1/12/10
- Bài viết
- 346
- Được thích
- 522
- Nghề nghiệp
- GIÁO VIÊN
Không nhất thiết phải mở file mới đâu, bạn chỉ cần chọn ô trong vùng "cấm địa". Sau đó copy dữ liệu từ 1 sheet khác trong file này, sau đó quay lại sheet lúc nãy (nhưng đừng chọn lại ô nhé, cứ để nguyên ô đã chọn lúc nãy và dán) thì vẫn dán như thường. Sở dĩ có hiện tượng này là vì code trên có tên là Workbook_SheetSelectionChange, có nghĩa là nó chỉ được kích hoạt khi có sự thay đổi ô/vùng chọn.
Để khắc phục hiện tượng này, bạn thêm 1 code sau cho đối tượng ThisWorkbook nhằm mục đích là mỗi lần chọn sheet có chặn thao tác dán thì sẽ chọn 1 ô nằm ngoài vùng "cấm địa" (ô A1 có thể thay bởi ô bất kỳ, miễn là ở ngoài vùng chặn thao tác dán).
Vởi code này, mỗi lần muốn dán vào vùng "cấm địa" thì bắt buộc phải chọn lại ô. Và như vậy đồng nghĩa với việc kích hoạt Sub Workbook_SheetSelectionChange.PHP:Private Sub Workbook_SheetActivate(ByVal Sh As Object) If InStr(ShChan, "." & Sh.Name & ".") > 0 Then Sh.[A1].Select End Sub
Nếu cần thiết (trường hợp copy từ file khác, dán sang file này) thì bạn thêm 1 code nữa cho đối tượng ThisWorkbook
Thêm nữa, trong cả 3 sub có đề cập ở đây đều có sử dụng đến 1 danh sách các sheet muốn chặn thao tác dán. Do đó, ta có thể khai báo 1 hằng chung ShChan dạng String để lưu danh sách này. Mỗi lần muốn thay đổi danh sách, ta chỉ cần thay đổi 1 lần (thay vì phải thay đổi 3 vị trí trong 3 sub).PHP:Private Sub Workbook_WindowActivate(ByVal Wn As Window) If InStr(".Sheet1.Sheet2.", "." & ActiveSheet.Name & ".") > 0 Then ActiveSheet.[A1].Select End Sub
Cuối cùng, toàn bộ code cho đối tượng ThisWorkbook sẽ là:
PHP:Const ShChan As String = ".Sheet1.Sheet2." Private Sub Workbook_SheetActivate(ByVal Sh As Object) If InStr(ShChan, "." & Sh.Name & ".") > 0 Then Sh.[A1].Select End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) If InStr(ShChan, "." & Sh.Name & ".") = 0 Then Exit Sub If Not Intersect(Target, Union(Sh.[C6:H55], Sh.[J6:N6])) Is Nothing Then Application.CutCopyMode = False End Sub Private Sub Workbook_WindowActivate(ByVal Wn As Window) If InStr(ShChan, "." & ActiveSheet.Name & ".") > 0 Then ActiveSheet.[A1].Select End Sub
Hình như không khả thi lắm đó anh PHÚC.