Cách chạy macro trong sheet bị protect

Quảng cáo
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.


36813262086_534d2f8465_b.jpg


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.


37001268475_c358b11689_b.jpg


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.


37001269035_5c760ac16a_b.jpg


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:
Hay lắm. VBA có nhiều thứ mà mình chưa biết quá. Cứ mỗi ngày học thêm 1 ít, tích tiểu thành đại. Ths!
 
A/Chị gải thích hộ tại sao em gõ đoạn code bị báo lỗi như này va f sảu như thế nào ạ. Thanks
Sub LockCells()
Sheet3.Unprotect Password:="123abc"
'Range("I8:J37").Select
'Selection.Locked = True
Worksheets("Sheet3").Range("I8:J37").Locked = True
Worksheets("Sheet3").Protect Password:="123abc", UserInterfaceOnly:=True
End Sub
 
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.


36813262086_534d2f8465_b.jpg


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.


37001268475_c358b11689_b.jpg


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.


37001269035_5c760ac16a_b.jpg


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!

Một số bài viết có liên quan:
1/ Phân tích dữ liệu với Table (phần 1)
2/ 5 mẹo làm việc với Excel cho các Chuyên gia Thuế và Kế toán
3/ 7 hàm hữu ích bị lãng quên trong Excel
4/ Chiêu 32: Thao tác trên dữ liệu với Advanced Filter
5/ Top 5 thủ thuật Excel siêu cơ bản cho người mới chập chững bắt đầu
6/ 5 tính năng của Excel vừa mạnh mẽ vừa dễ dàng không phải ai cũng biết
7/ Sử dụng Excel để ra quyết định hằng ngày
8/ Công cụ Camera trong Excel
9/ Mật khẩu và bảo mật trong Excel
10/ Kết hợp biểu đồ và thêm 1 trục phụ
Chào Thầy Duy @kyo.
Thầy cho em hỏi trường hợp chạy sự kiện worksheet calculate trong sheet bị protect thì code ntn vậy Thầy?
Em dùng combobox trong sheet protect, dùng event này cảnh báo khi chọn sai (căn cứ theo giá trị combobox trả ra), nhưng chọn xong báo lỗi sheet protected, em đặt code unprotect ở đâu cũng không có tác dụng.
 
Lần chỉnh sửa cuối:
Sao em có chèn đoạn code này vào, để chạy code trên sheet Protect (có pass):
Mã:
Sheet3.Protect UserInterFaceOnly:=True
thì khi chạy code nó hiện bảng nhập Pass, vậy có cách nào mở khóa sheet mà không hiện bảng nhập Pass luôn không ạ.
 
Quảng cáo
Top Bottom