Bảo vệ định dạng có điều kiện (Microsoft Excel)
Kees có một trang tính sử dụng rộng rãi định dạng có điều kiện.
Tuy nhiên, định dạng có điều kiện tiếp tục bị rối khi người dùng sao chép và dán thông tin hoặc khi họ sử dụng tính năng kéo và thả để chỉnh sửa trang tính. Anh ấy băn khoăn về cách tốt nhất để ngăn điều này xảy ra.
Điều này xảy ra vì định dạng có điều kiện chỉ được coi là định dạng. Bản sao và dán tiêu chuẩn (hoặc chỉnh sửa kéo và thả)
sao chép mọi thứ, bao gồm cả định dạng. Điều này có nghĩa là các ô đích sẽ có định dạng của các ô nguồn, không phải định dạng của các ô đích (bao gồm bất kỳ định dạng có điều kiện nào có thể có trong các ô đích).
Sau đó, câu trả lời là yêu cầu người dùng không sao chép và dán tiêu chuẩn.
Thay vào đó, họ nên sử dụng các tùy chọn dán để dán bất kỳ thứ gì (hoặc mọi thứ) ngoại trừ định dạng.
Tất nhiên, một tùy chọn khác là bảo vệ trang tính để người dùng không thể sao chép và dán bất cứ thứ gì. Tuy nhiên, điều này có thể hơi nghiêm trọng đối với người dùng của bạn vì bạn có thể muốn họ thực hiện các thay đổi. (Bạn chỉ không muốn họ làm sai định dạng có điều kiện.)
Điều này dẫn đến một cách tiếp cận vĩ mô. Nếu bạn có thể ghi macro áp dụng định dạng có điều kiện cho các ô, bạn có thể tạo một số macro bổ sung áp dụng macro đã ghi đó, nếu cần. Ví dụ: giả sử macro mà bạn ghi lại được gọi là thứ gì đó ngắn và hấp dẫn như SetCondFormat.
Tiếp theo, vào Visual Basic Editor và trong cửa sổ ngay lập tức, nhập thông tin sau:
? Cells.SpecialCells(xlCellTypeAllFormatConditions).Address
Giả sử bạn đã thiết lập xong định dạng có điều kiện, điều này sẽ trả về một dòng — có lẽ là một dòng dài — hiển thị địa chỉ của các ô và phạm vi sử dụng định dạng có điều kiện. Nó sẽ giống như thế này:
$B$3:$B$50,$D$3:$D$50,$G$3:$I$20
Tiếp theo, thêm macro sau vào mô-đun mã ThisWorksheet:
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range Const cCFAddress = "$B$3:$B$50,$D$3:$D$50,$G$3:$I$20" On Error Resume Next Set r = Range(cCFAddress) On Error GoTo 0 If r IsNot Nothing Then If Application.Intersect(Target, r) IsNot Nothing Then SetCondFormat End If End If End Sub
Chìa khóa ở đây là đảm bảo rằng hằng số cCFAddress được đặt bằng bất cứ giá trị nào được trả về khi bạn nhìn thấy các địa chỉ trong cửa sổ Ngay lập tức. (Nếu sau này bạn thay đổi định dạng có điều kiện, bạn có thể sử dụng lại thủ thuật Cửa sổ ngay lập tức và chỉ cần thay đổi dòng trong macro trên.)
Macro được thực thi mỗi khi có thay đổi trong trang tính. Nó sẽ kiểm tra xem địa chỉ đã thay đổi (được chuyển vào biến Target) có phải là một phần của các ô ban đầu chứa các định dạng có điều kiện hay không. Nếu đúng như vậy, thì SetCondFormat của bạn (tệp bạn đã ghi để thực hiện định dạng có điều kiện) lại được thực thi.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (4362) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.