2010-06-14 15 views

risposta

3

Prova ad usare il metodo Worksheet.Protect, in questo modo:

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

Si dovrebbe, tuttavia, essere preoccupato per inclusa la password nel codice VBA. Non hai necessariamente bisogno di una password se stai solo provando a creare una semplice barriera che impedisce all'utente di commettere piccoli errori come l'eliminazione di formule, ecc.

Inoltre, se vuoi vedere come fare certe cose in VBA in Excel, prova a registrare una Macro e a guardare il codice che genera. Questo è un buon modo per iniziare in VBA.

21

È possibile innanzitutto scegliere quale le cellule non si desidera essere protetti (per essere modificabile dall'utente) impostando lo stato di blocco di loro su False:

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

Quindi, è possibile proteggere il foglio, e tutte le altre celle saranno protette. Il codice per fare questo, e ancora consentire il codice VBA per modificare le cellule è:

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

o

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

Si potrebbe anche voler annuncio d una password, altrimenti è semplice fare clic su "non rimuovere il foglio di lavoro" e quindi è possibile apportare modifiche alle celle precedentemente bloccate. – Jonathan

+0

la riga sopra Worksheets ("Sheet1"). Protect (UserInterfaceOnly: = True) dovrebbe essere Worksheets ("Sheet1"). Proteggi UserInterfaceOnly: = True, ovvero nessuna parentesi – dinotom

+0

@dinotom, guarda la cronologia delle modifiche e il tipo che ha modificato in questo modo spiega perché –

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

È anche possibile farlo a livello di foglio catturato nel foglio di lavoro di cambia evento. Se quella suite le tue esigenze migliori. Consente di blocco dinamico in base ai valori, criteri, 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

Diciamo per esempio, in un caso, se si vuole celle bloccate dalla serie A1 a I50 poi sotto è il codice:

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

In un altro caso, se si dispone già di un foglio protetto quindi seguire sottostante codice:

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