Cách chạy macro trong sheet bị protect
Khi cần chia sẻ file cho nhiều người, bạn sẽ muốn protect sheet để tránh cho các thao tác không mong muốn từ người sử dụng. Tuy nhiên, việc này cũng kéo theo macro của bạn không thể chạy được, nếu nó cần tương tác với các ô đã bị khóa. Giả sử, bạn khóa ô A1, nhưng macro của bạn cần ghi giá trị vào ô A1, do đó nó sẽ báo lỗi ngay lập tức.
Vậy làm cách nào để chạy macro này?
Cách thứ nhất
Một cách logic, chúng ta có thể dùng code để unprotect sheet trước, sau đó khi đoạn code bạn cần được thực hiện xong, chúng ta sẽ protect trở ngược lại.
Như bạn thấy, cách này lập tức phát huy hiệu quả, chữ "Giaiphapexcel.com" đã được ghi vào ô A1. Tuy nhiên, cách này tiềm ẩn một rủi ro cao. Giả sử, nếu đoạn code bạn xây dựng có trục trặc và bị lỗi giữa chừng, sheet đó sẽ không bị protect nữa.
Cách thứ hai
Như mặc định, khi bạn tiến hành protect sheet từ bên ngoài, mọi thao tác bạn thực hiện ngay tại ô bị khóa sẽ báo lỗi, kể cả sử dụng code. Tuy nhiên, nếu bạn viết code với dòng Sheet1.Protect UserInterfaceOnly := True, Excel sẽ hiểu bạn chỉ khóa đối với các tương tác trực tiếp trên bảng tính, còn macro sẽ vẫn chạy được.
Bạn thấy không, trên hình, sheet vẫn bị protect nhưng macro vẫn chạy và gán chữ Giaiphapexcel.com vào ô A1 như bình thường.
Chúc bạn thành công!
Khi cần chia sẻ file cho nhiều người, bạn sẽ muốn protect sheet để tránh cho các thao tác không mong muốn từ người sử dụng. Tuy nhiên, việc này cũng kéo theo macro của bạn không thể chạy được, nếu nó cần tương tác với các ô đã bị khóa. Giả sử, bạn khóa ô A1, nhưng macro của bạn cần ghi giá trị vào ô A1, do đó nó sẽ báo lỗi ngay lập tức.

Vậy làm cách nào để chạy macro này?
Cách thứ nhất
Một cách logic, chúng ta có thể dùng code để unprotect sheet trước, sau đó khi đoạn code bạn cần được thực hiện xong, chúng ta sẽ protect trở ngược lại.

Như bạn thấy, cách này lập tức phát huy hiệu quả, chữ "Giaiphapexcel.com" đã được ghi vào ô A1. Tuy nhiên, cách này tiềm ẩn một rủi ro cao. Giả sử, nếu đoạn code bạn xây dựng có trục trặc và bị lỗi giữa chừng, sheet đó sẽ không bị protect nữa.
Cách thứ hai
Như mặc định, khi bạn tiến hành protect sheet từ bên ngoài, mọi thao tác bạn thực hiện ngay tại ô bị khóa sẽ báo lỗi, kể cả sử dụng code. Tuy nhiên, nếu bạn viết code với dòng Sheet1.Protect UserInterfaceOnly := True, Excel sẽ hiểu bạn chỉ khóa đối với các tương tác trực tiếp trên bảng tính, còn macro sẽ vẫn chạy được.

Bạn thấy không, trên hình, sheet vẫn bị protect nhưng macro vẫn chạy và gán chữ Giaiphapexcel.com vào ô A1 như bình thường.
Chúc bạn thành công!
Chỉnh sửa lần cuối bởi điều hành viên: