2010-06-14 3 views

ответ

3

Попробуйте использовать метод Worksheet.Protect, например, так:

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

Вы должны, однако, быть обеспокоены, включая пароль в коде VBA. Вам не обязательно нужен пароль, если вы только пытаетесь создать простой барьер, который заставляет пользователя делать небольшие ошибки, такие как удаление формул и т. Д.

Кроме того, если вы хотите увидеть, как делать определенные вещи в VBA в Excel, попробуйте записать макрос и посмотреть на код, который он генерирует. Это хороший способ начать работу в VBA.

21

Вы можете сначала выбрать, какие клетки вы не хотите быть защищены (чтобы пользователь редактируемые), установив Locked статус их Ложные:

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

Затем, вы можете защитить лист, и все остальные ячейки будут защищены. код, чтобы сделать это, и по-прежнему позволяет ваш VBA код для изменения клеток является:

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

или

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

Вы также можете захотеть объявление d пароль, в противном случае тривиальное дело просто нажать «снять защиту листа», а затем вы можете внести изменения в ранее заблокированные ячейки. – Jonathan

+0

Строка над рабочими листами («Лист1»). Protect (UserInterfaceOnly: = True) должен быть Worksheets («Sheet1»). Защитить UserInterfaceOnly: = True, то есть без круглых скобок – dinotom

+0

@ dinotom, посмотрите историю изменений и парня, который редактировал это так объясняет, почему –

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

Вы также можете сделать это на уровне рабочего листа захваченного в рабочем листе изменить событие. Если это удовлетворит ваши потребности. Позволяет динамической блокировки на основе значений, критериев, ЭСТ ...

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

Скажем, например, в одном случае, если вы хотите запертых клеток из диапазона А1 i50 затем ниже код:

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

В другом случае, если у вас уже есть защищенный лист затем следуют ниже код:

ActiveSheet.Unprotect Password:="Enter your Password" 
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True 
ActiveSheet.Protect Password:="Enter your Password" 
Смежные вопросы