Как заблокировать данные в ячейке в Excel с помощью VBA - PullRequest
15 голосов
/ 14 июня 2010

Я хочу запретить другим редактировать содержимое ячеек в моем листе Excel с помощью VBA.Возможно ли это сделать?

Ответы [ 5 ]

27 голосов
/ 14 июня 2010

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

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

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

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

или

Call Worksheets("Sheet1").Protect(UserInterfaceOnly:=True)
3 голосов
/ 14 июня 2010

Попробуйте использовать метод 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.

2 голосов
/ 18 сентября 2013

Скажем, например, в одном случае, если вы хотите заблокировать ячейки в диапазоне от А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"
0 голосов
/ 15 июня 2010

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

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
0 голосов
/ 15 июня 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...