2010-06-14 3 views

Odpowiedz

3

Spróbuj użyć metody Worksheet.Protect, tak:

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

Należy jednak być zaniepokojony tym hasło w kodzie VBA. Nie potrzebujesz hasła, jeśli próbujesz ustawić prostą barierę, która uniemożliwia użytkownikowi popełnianie drobnych błędów, takich jak usuwanie formuł itp.

Ponadto, jeśli chcesz zobaczyć, jak robić pewne rzeczy w VBA w programie Excel spróbuj nagrać makro i przejrzyj generowany kod. To dobry sposób na rozpoczęcie pracy z VBA.

21

Można najpierw wybrać których komórki nie chcesz być chronione (być edytowane przez użytkownika) poprzez ustawienie Locked status nich fałsz:

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

Następnie można chronić arkusz, a wszystkie pozostałe komórki będą chronione. kod to zrobić, i nadal pozwalają kodu VBA zmodyfikować komórki to:

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

lub

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

Możesz również chcieć ogłoszenie d hasło, w innym wypadku wystarczy kliknąć "Odblokuj arkusz roboczy", a następnie wprowadzić zmiany w uprzednio zablokowanych komórkach. – Jonathan

+0

wiersz powyżej Arkusze robocze ("Arkusz1") Protect (UserInterfaceOnly: = True) powinien być arkuszem roboczym ("Arkusz1"). Zabezpiecz UserInterfaceOnly: = True, tj. Bez nawiasów – dinotom

+0

@dinotom, spójrz na historię edycji i faceta, który edytował w ten sposób wyjaśnia, dlaczego –

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

Można też zrobić to na poziomie arkusza przechwyconego w arkuszu roku zmień wydarzenie. Jeśli to lepiej spełnia twoje potrzeby. Umożliwia dynamiczne blokowania w oparciu o wartości, kryteriów, ect ...

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

Załóżmy na przykład w jednym przypadku, jeśli chcesz zablokowanych komórek z zakresu A1 do I50 następnie poniżej kod:

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

W innym przypadku, jeśli masz już chroniony arkusz następnie wykonaj poniższy kod:

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