Làm thế nào Protect hoặc unprotect nhiều sheet cùng 1 lúc

Liên hệ QC

nthaison

Thành viên mới
Tham gia
25/12/06
Bài viết
6
Được thích
2
Cac ban co biet cach nao de toi co the protect hoac unprotect 1 luc cung nhieu Sheet ?
 
Bạn thử code sau:
Mã:
Option Explicit
'
Public Sub Protect_Sheets()
On Error Resume Next
Dim strPass As String
Dim sht_name As Worksheet
strPass = InputBox("Enter your Password")
For Each sht_name In Worksheets
    If Not sht_name.ProtectContents Then
        sht_name.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=strPass
    End If
Next sht_name
End Sub
'
Public Sub UnProtect_Sheets()
On Error Resume Next
Dim strPass As String
Dim sht_name As Worksheet
strPass = InputBox("Enter your Password")
For Each sht_name In Worksheets
    sht_name.Unprotect strPass
Next sht_name
End Sub
 
Upvote 0
Thêm một cái nữa để bạn tham khảo:

Mã:
[b]Sub ProtectSheets()[/b]
 Dim iZ As Byte:                Dim StrC As String
  On Error Resume Next
  For iZ = 1 To 9
    StrC = "Sheet" & CStr(iZ)
    Sheets(StrC).Select
    ActiveSheet.Protect Password:="AaaA"
Next iZ
[b]End Sub[/b]
 
Upvote 0
Làm thế nào protect và unprotect

Mình rất cảm ơn các bạn đã giúp mình giải quyết vấn đề mà minh nêu ra.
Còn 1 trường hợp nhỏ nếu mình chỉ muốn chọn lựa 1 số sheet để protect hoặc unprotect chứ không phải tất cả các Sheet thì mình chưa giải quyết được. Mong các bạn giải quyết hộ mình.
Lưu ý : tất cả sheet mình đều đặt 1 cái tên riêng.
 
Upvote 0
Còn 1 trường hợp nhỏ nếu mình chỉ muốn chọn lựa 1 số sheet để protect hoặc unprotect chứ không phải tất cả các Sheet thì mình chưa giải quyết được. Mong các bạn giải quyết hộ mình.
Lưu ý : tất cả sheet mình đều đặt 1 cái tên riêng.
Theo mình nghĩ cả 2 cách đều thực hiện cho như cầu phát sinh của bạn được;
Mình đề cập cách của mình:
Dù bạn có gán tên nào đi nữa; excel vẫn có tên cúng cơm cho các sheets của bạn & chúng bất di bất dịch; Bạn có thể thấy điều này qua CS VBA
Như vậy bạn muốn Protect sheet nào thì sửa lại điều kiện if thêm nữa là xong thôi!
 
Upvote 0
nthaison đã viết:
Còn 1 trường hợp nhỏ nếu mình chỉ muốn chọn lựa 1 số sheet để protect hoặc unprotect chứ không phải tất cả các Sheet thì mình chưa giải quyết được. Mong các bạn giải quyết hộ mình.
Lưu ý : tất cả sheet mình đều đặt 1 cái tên riêng.

Sử dụng thủ tục Protect_Unprotect để giải quyết yêu cầu trên của bạn.
Sử dụng thủ tục Protect_Sheets UnProtect_Sheets khi bạn muốn áp dụng cho tất cả các sheet.
 

File đính kèm

  • Protect_Unprotect_Sheets.xls
    43 KB · Đọc: 1,723
Upvote 0
Bạn đặt tên cho các Sheet muốn Protect bắt đầu bằng một vài kí tự đặt biệt nào đó, vì dụ PrSheet1, PrSheet2 ...
Sau đó chỉnh lại code của bạn nvson chút xíu là ok rồi => Nếu sheet name mà bắt đầu bằng Pr thì mới Protect ... còn các tên khác thì miễn
.................
If Not sht_name.ProtectContents Then
If sht_name.Name Like "Pr*" Then sht_name.Protect
DrawingObjects:=True, Contents:=True, Scenarios:=True,
Password:=strPass
End If
..........

Have fun
 
Upvote 0
Davidsy đã viết:
Bạn đặt tên cho các Sheet muốn Protect bắt đầu bằng một vài kí tự đặt biệt nào đó, vì dụ PrSheet1, PrSheet2 ...
Sau đó chỉnh lại code của bạn nvson chút xíu là ok rồi => Nếu sheet name mà bắt đầu bằng Pr thì mới Protect ... còn các tên khác thì miễn
.................
If Not sht_name.ProtectContents Then
If sht_name.Name Like "Pr*" Then sht_name.Protect
DrawingObjects:=True, Contents:=True, Scenarios:=True,
Password:=strPass
End If
..........

Have fun

Có thể đặt nhiều lệnh if được không nhỉ !!
Mỗi lệnh if là mỗi sheet muốn protect.
(If sht_name.Name Like "Pr*" Then sht_name.Protect )
 
Upvote 0
Thien đã viết:
Có thể đặt nhiều lệnh if được không nhỉ !!
Mỗi lệnh if là mỗi sheet muốn protect.
(If sht_name.Name Like "Pr*" Then sht_name.Protect )

Được chứ bạn. Nhưng lại phải đặt ra các trường hợp
- Nhập nhiều lần: Mối lần chạy sẽ hiện ra một Inputbox, nhập ký tự chính xác hoặc đại diện của sheet đó thì tất cả những sheet thỏa mãn sẽ được thi hành. Sau đó lại tiếp tục vòng lặp. Nếu muốn nữa thì nhập tiếp, còn không thì thoát.
- Nhập 1 lần : Tạo ra một vùng (range; array) là tên của các sheet muốn thi hành (có thể là tên trong excel hoặc trong VBA). Vùng này bạn có thể tạo ra trên một sheet nào đó (cho dễ thay đổi), hoặc tạo ra ngay trong VBA, sau đó chương trình sẽ căn cứ vào vùng đó để thi hành vòng lặp theo từng phần tử trong vùng đó

Thân !
 
Upvote 0
Sử dụng thủ tục Protect_Unprotect để giải quyết yêu cầu trên của bạn.
Sử dụng thủ tục Protect_Sheets UnProtect_Sheets khi bạn muốn áp dụng cho tất cả các sheet.
.
Nhờ anh nvson!
mình đã tải file đính kèm của anh để lấy VBA
lập một workbook mới và tạo nút lệnh (chọn sheet - khóa all sheet - mở all sheet) trên sheet1 để thử Khóa/Mở các sheet còn lại
nhưng (xem file đính kèm) trên form "frmprotect" các chức năng "protect sheet" (thì không khóa các sheet được chọn mà chỉ khóa mỗi sheet1 và 2)
và "unprotect sheet" cũng vậy (thì không mở được các sheet được chọn)
Nhờ anh nvson xem giúp file đính kèm và sửa lại cái sai mà mình copy qua hổng đúng.
Xin cám ơn anh nhiều
p/s không đính kèm được file, nên mình đính kèm trên bài viết của anh nhé - thanks
 

File đính kèm

  • tạo Protect_Unprotect_Sheets.xlsm
    29.9 KB · Đọc: 9
Upvote 0
.
Nhờ anh nvson!
mình đã tải file đính kèm của anh để lấy VBA
lập một workbook mới và tạo nút lệnh (chọn sheet - khóa all sheet - mở all sheet) trên sheet1 để thử Khóa/Mở các sheet còn lại
nhưng (xem file đính kèm) trên form "frmprotect" các chức năng "protect sheet" (thì không khóa các sheet được chọn mà chỉ khóa mỗi sheet1 và 2)
và "unprotect sheet" cũng vậy (thì không mở được các sheet được chọn)
Nhờ anh nvson xem giúp file đính kèm và sửa lại cái sai mà mình copy qua hổng đúng.
Xin cám ơn anh nhiều
p/s không đính kèm được file, nên mình đính kèm trên bài viết của anh nhé - Cảm ơn
Tôi kiểm tra thì vẫn hoạt động Bình thường nhé!
218340
218341
 
Upvote 0
Tôi kiểm tra thì vẫn hoạt động Bình thường nhé!
View attachment 218340
View attachment 218341
cám ơn anh hml89 đã hồi âm
Rất mong anh giúp dùm file mình đã gửi, với cái -mình không giải quyết được:
trong sheet 1 , mình dùng nút "Chọn Sheet" để khóa sheet tùy chọn (trong ví dụ này mình muốn khóa sheet10)
218365
tiếp tục, và kiểm tra lại thì: tại sheet1 = bị khóa, còn sheet10 = vẫn không bị khóa (!)
218364
218366
Vì vậy mong muốn anh giúp: khi chọn khóa sheet tùy chọn thì sheet đó bị khóa mà thôi,
Xin cám ơn a nhiều
 

File đính kèm

  • tạo Protect_Unprotect_Sheets.xlsm
    29.9 KB · Đọc: 7
Upvote 0
Lâu không động đến VBA, bạn xem trong file đính kèm nhé
 

File đính kèm

  • tạo Protect_Unprotect_Sheets.xlsm
    32.5 KB · Đọc: 26
Upvote 0
Web KT
Back
Top Bottom