2010-06-14 31 views

Respuesta

3

Trate de usar el método Worksheet.Protect, así:

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

Debería, sin embargo, estar preocupado incluida la contraseña en el código VBA. No necesita necesariamente una contraseña si solo intenta poner una barrera simple que evite que el usuario cometa pequeños errores, como eliminar fórmulas, etc.

Además, si desea ver cómo hacer ciertas cosas en VBA en Excel, intente grabar una macro y mirar el código que genera. Esa es una buena manera de comenzar en VBA.

21

primer lugar, puede elegir el que las células que no quiere estar protegido (para ser editable por el usuario) estableciendo el estado de bloqueo de ellos en Falso:

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

A continuación, puede proteger la hoja, y todas las otras celdas estarán protegidas. El código para hacer esto, y todavía permita que su código VBA para modificar las células es:

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

o

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

Quizás también desee d una contraseña, de lo contrario es una cuestión trivial simplemente hacer clic en "desproteger hoja de trabajo" y luego puede realizar modificaciones en las celdas previamente bloqueadas. – Jonathan

+0

la línea de arriba Worksheets ("Sheet1"). Protect (UserInterfaceOnly: = True) debe ser Worksheets ("Sheet1"). Protect UserInterfaceOnly: = True, es decir, sin paréntesis – dinotom

+0

@dinotom, mira el historial de edición y el chico que editó de esa manera explica por qué –

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

También puede hacerlo en el nivel de hoja de cálculo capturado en la década de hoja de cálculo evento de cambio Si esa suite necesita más. Permite el bloqueo dinámico basado en los valores, criterios, 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

Digamos, por ejemplo, en un caso, si quieres en celdas cerradas de la gama A1 a continuación, I50 a continuación es el código:

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

En otro caso, si ya tienen una hoja protegida y siga por debajo de código:

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