Dùng VBA để Protect sheet (trừ một cell cố định)!

  • Thread starter Thread starter boong
  • Ngày gửi Ngày gửi
Liên hệ QC

boong

Thành viên thường trực
Tham gia
11/1/08
Bài viết
285
Được thích
266
Chào các bác, cho em hỏi có đoạn VBA nào có thể Protect Sheet1 ngoại trừ một ô G1 (hay một cụm G1:J10) hay không? Nếu có thì cho em xin luôn ví dụ trên Sheet cụ thể được không? Thanks...
 
Lần chỉnh sửa cuối:
Tôi chỉ bạn quy trình làm code... cũng khá dễ dàng, là dùng chức năng record macro, sau đó mở code ra xem hắn ghi gì trong đó
Quy trình làm như sau:
1> Vào menu Tools\Macro\Record new macro.. gõ tên macro vào, OK
2> Bắt đầu thao tác đễ chừa lại cell G1: Chọn cell G1, bấm Ctrl +1.. vào tab Protection và bỏ chọn "Locked"
3> Vào menu Tools\Protection\Protect Sheet, gõ pass nếu cần rồi OK
4> Tắt record macro
5> Bấm Atl + F11 vào xem code và sữa lại theo ý mình
Như tôi tự record macro và sửa lại đôi chút thì nó thành:
PHP:
Sub Macro1()
    Sheets("Sheet1").Select
    Range("G1").Locked = False
    Sheets("Sheet1").Protect
End Sub
ANH TUẤN
 
Lần chỉnh sửa cuối:
Upvote 0
Xin lỗi các bác một chút nha. Em để nó như vậy trong Macro thì chạy không sao.
PHP:
Sub khoa() Dim a As String     a = Sheet1.Range("G2").Value Sheet1.Range("G2").Locked = False Sheet1.Protect (a) End Sub
Nhưng khi đặt nó vào ThisWorkbook như sau thì nó báo lỗi ở dòng số 4.
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim a As String     a = Sheet1.Range("G2").Value Sheet1.Range("G2").Locked = False Sheet1.Protect (a) End Sub
Vậy xin hỏi phải khắc phục như thế nào ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Sao tôi chạy ko báo lỗi gì cã... Đỗi pass ngon lành, cã 2 code đều chạy! Bạn xem lại lần nửa thử
Hay bạn thử sửa đoạn:
Mã:
Sheet1.Range("G2").Locked = False
thành:
Mã:
If Sheet1.Range("G2").Locked = True Then Sheet1.Range("G2").Locked = False
Xem có hết lổi ko?
ANH TUẤN
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bác nhiều nha!!!
 
Lần chỉnh sửa cuối:
Upvote 0
Lổi có thể sửa dc... tuy nhiên tôi thấy code này ko ổn rồi... Nó sẽ ko lưu giá trị G2 làm pass khi lưu file đâu... Bạn ko tin cứ thử mở file, gõ pass mới vào G2, đóng và lưu file lại, Tiếp tục mở file sẽ thấy cái pass mới ko có tác dụng! Hi... hi..
ANH TUẤN
 
Upvote 0
Tôi biết nguyên nhân tại sao.. nhưng mà.. e rằng vụ password này càng bàn thì càng lòi ra chuyện... Đại khái bạn muốn nó lấy G2 làm password thì điều đầu tiên phải Unprotect sheet với pass củ trước.. sau đó mới thay pass mới...
Logic hiển nhiên.. bạn ngẫm nghĩ xem có đúng ko?
ANH TUẤN
 
Upvote 0
Em thử rồi, đúng là phải Unprotect trước nhưng thay đổi dữ liệu mất rồi làm sao Unprotect được hả anh. Nếu không thay đổi dữ liệu thì không sao cả. Nhưng nếu người ta muốn có một Pass mới thì phải làm sao? Còn thằng này có giúp gì được không? Em không biết xài thằng này thế nào cả?
PHP:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) .... End Sub
Không biết có cách nào "trước khi Change" không nhỉ (ý là BeforeChange đó)... !$@!!
 
Lần chỉnh sửa cuối:
Upvote 0
Hello Oh... Mọi người có ai ở nhà không! Sao vậy, đàn em cần giúp đở đây! Help..me..Help...me...
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi chưa làm nhưng tôi mường tượng ra 1 cách:
-G2 chứa password đễ bạn thay đổi
-K2 là nơi lưu password củ
Vậy code có thể chạy nếu làm theo trình tự:
-Lấy giá trị K2 đễ Unprotect
-Copy G2 sang K2
-Lấy G2 làm password Protect
-Đóng file
Bạn làm thử theo hướng này xem... Nói chung phải có 2 cell: 1 lưu pass mới và 1 lưu pass củ
ANH TUẤN
 
Upvote 0
Theo ý bác em làm được thằng này thấy chạy tốt. Bác có thể Test lại được không? Em không biết có lỗi gì không mà em còn chưa biết không?
PHP:
Sub khoa() Dim a, b As String a = Sheet1.Range("G2").Value b = Sheet1.Range("H2").Value Sheet1.Unprotect (b) Sheet1.Range("G2:H2").Locked = False Sheet1.Protect (a) Sheet1.Range("H2").Value = Sheet1.Range("G2").Value End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Vụ protect này thật ra tôi cũng ko rành lắm, có lẽ nhờ các cao thủ khác thì ngon hơn...
Tôi đang nghĩ có lẽ bạn nên ẩn 2 cell chưa pass (ẩn cột).. Chứ chẳng lẽ cái cell chưa pass ấy nó cứ lồ lộ ra thế à?
ANH TUẤN
 
Upvote 0
Thật ra em dùng Form để nhập pass vào ô đó. Còn Sheet đó thì được ẩn đi bằng dòng lệnh.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom