Nhờ các bạn mà mình sáng ra nhiều vấn đề. Có thể tóm tắt như sau:
1. Về lệnh CUT các ô là vùng tham chiếu của hàm:
-Trường hợp 1: Ta CUT ô ở ngoài vào ô tham chiếu (tạm gọi là CUT vào).
Kết quả: xuất hiện lỗi #REF
Lý do: Excel quan niệm ô tham chiếu ấy không còn tồn tại.
Điều này gây khó khăn cho người dùng vì trên thực tế ô tham chiếu ấy vẫn tồn tại.
-Trường hợp 2: Ta CUT ô tham chiếu ra 1 ô khác ở ngoài (tạm gọi là CUT ra)
Kết quả: Không xuất hiện lỗi. Trong hàm, ô tham chiếu có địa chỉ mới ( là ô mới dời đến)
Lý do: Excel rất thông minh. nghĩ ta dời vị trí của ô nên hàm dời theo.
Điều này vừa tạo thuận lợi, vừa gây khó khăn cho người dùng. Thuận lợi khi ta chuyển vị trí ô. Khó khăn khi ta chỉ chuyển giá trị của ô.
2.Vậy thì vấn đề đặt ra là gì?
Vấn đề không phải là: -Excel bị lỗi hay là không?
-Lệnh CUT có lợi hay hại?
Theo mình, chúng ta đối mặt với vấn đề lớn hơn: đó là
vấn đề bảo vệ, bảo mật. Một chương trình được tạo ra, không có sai sót, được protect hẳn hoi thế mà có thể bị "crack" bất cứ lúc nào, với bất kỳ người dùng nào miễn là họ chỉ cần biết dùng lệnh CUT!
3.Hướng khắc phục:
Mình đã dùng nhiều cách:
-Biến địa chỉ ô tham chiếu thành địa chỉ tuyệt đối : không có kết quả
-Dùng Define/name đặt tên cho ô , vùng tham chiếu: chẳng ăn thua gì.
-Cảnh báo với người sử dụng: không an toàn.
Mình nghĩ chỉ còn 1 cách là:
Nguyên văn bởi Mr Okebab
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.CutCopyMode = False
End Sub
. .. . . .
Hoặc tất cả các công thức ta dùng VBA, sau khi ta nhấn tính toán thì cột O mới bắt đầu tính toán và cho ra giá trị
Đây chỉ là một gợi ý. Dù sao thì việc bảo vệ của 1 sheet không cho phép qui định đến từng chi tiết nhỏ của cell (VD như cấm copy, cấm di chuyển . . )
-Bạn nói là chỉ gợi ý nhưng theo mình đây là cách duy nhất để khắc phục tình trạng bảo mật kém của Excel:
dùng VBA.
Xin chân thành cám ơn các bạn.