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

Quảng cáo

kyo

Nguyễn Khắc Duy
Thành viên BQT
Administrator
Tham gia ngày
4 Tháng sáu 2006
Bài viết
903
Được thích
2,669
Điểm
1,618
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!
 
Chỉnh sửa lần cuối bởi điều hành viên:

songmai

Thành viên chính thức
Tham gia ngày
6 Tháng tám 2007
Bài viết
92
Được thích
36
Điểm
0
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!
 

lovefree123

Thành viên mới
Tham gia ngày
22 Tháng tư 2009
Bài viết
28
Được thích
0
Điểm
0
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
 

Tăng Vĩnh Hòa

Thành viên mới
Tham gia ngày
1 Tháng sáu 2017
Bài viết
19
Được thích
1
Điểm
0
Tuổi
32
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!

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:

NguyenthiH

thành viên mù VBA
Tham gia ngày
11 Tháng mười hai 2016
Bài viết
811
Được thích
129
Điểm
0
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