2010-06-14 71 views

Trả lời

3

Hãy thử sử dụng các phương pháp Worksheet.Protect, như vậy:

Sub ProtectActiveSheet() 
    Dim ws As Worksheet 
    Set ws = ActiveSheet 
    ws.Protect DrawingObjects:=True, Contents:=True, _ 
     Scenarios:=True, Password="SamplePassword" 
End Sub 

Bạn nên, tuy nhiên, hãy quan tâm đến bao gồm cả mật khẩu trong mã VBA của bạn. Bạn không nhất thiết cần mật khẩu nếu bạn chỉ cố gắng tạo ra một rào cản đơn giản ngăn người dùng mắc lỗi nhỏ như xóa công thức, v.v.

Ngoài ra, nếu bạn muốn xem cách thực hiện một số điều trong VBA trong Excel, hãy thử ghi lại Macro và xem mã mà nó tạo ra. Đó là một cách hay để bắt đầu trong VBA.

21

Trước tiên, bạn có thể chọn ô bạn không muốn được bảo vệ (được sử dụng có thể chỉnh sửa) bằng cách thiết lập tình trạng bị khoá trong số họ để False:

Worksheets("Sheet1").Range("B2:C3").Locked = False 

Sau đó, bạn có thể bảo vệ sheet, và tất cả các ô khác sẽ được bảo vệ. Mã để làm điều này, và vẫn cho phép mã VBA của bạn để sửa đổi các tế bào là:

Worksheets("Sheet1").Protect UserInterfaceOnly:=True 

hoặc

Call Worksheets("Sheet1").Protect(UserInterfaceOnly:=True) 
+1

Bạn cũng có thể muốn quảng cáo d mật khẩu, nếu không nó là một vấn đề tầm thường chỉ cần nhấp vào "bảng tính không bảo vệ" và sau đó bạn có thể thực hiện chỉnh sửa cho các tế bào bị khóa trước đó. – Jonathan

+0

dòng bên trên Bảng tính ("Sheet1"). Bảo vệ (UserInterfaceOnly: = True) phải là Worksheets ("Sheet1"). Bảo vệ UserInterfaceOnly: = True, nghĩa là không có dấu ngoặc đơn – dinotom

+0

@dinotom, xem lịch sử chỉnh sửa và người đã chỉnh sửa theo cách đó giải thích lý do tại sao –

0
Sub LockCells() 

Range("A1:A1").Select 

Selection.Locked = True 

Selection.FormulaHidden = False 

ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True 

End Sub 
0

Bạn cũng có thể làm điều đó trên mức bảng bị bắt trong của bảng thay đổi sự kiện. Nếu bộ đó nhu cầu của bạn tốt hơn. Cho phép khóa động dựa trên các giá trị, tiêu chí, vv ...

Private Sub Worksheet_Change(ByVal Target As Range) 

    'set your criteria here 
    If Target.Column = 1 Then 

     'must disable events if you change the sheet as it will 
     'continually trigger the change event 
     Application.EnableEvents = False 
     Application.Undo 
     Application.EnableEvents = True 

     MsgBox "You cannot do that!" 
    End If 
End Sub 
2

Hãy nói ví dụ như trong một trường hợp, nếu bạn muốn các tế bào bị khóa từ cự ly A1 đến I50 thì dưới đây là các mã:

Worksheets("Enter your sheet name").Range("A1:I50").Locked = True 
ActiveSheet.Protect Password:="Enter your Password" 

Trong một trường hợp khác nếu bạn đã có một tấm bảo vệ sau đó làm theo bên dưới mã:

ActiveSheet.Unprotect Password:="Enter your Password" 
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True 
ActiveSheet.Protect Password:="Enter your Password" 
Các vấn đề liên quan