Как заблокировать данные в ячейке в excel с помощью vba
Я хочу, чтобы другие не редактировали содержимое ячейки на моем листе excel, используя VBA. Можно ли сделать это?
- В Excel, сделав «Стоп-кавычки» в правом столбце вместо самого левого?
- Как работает защита паролей рабочего листа Excel
- Как перенести данные в столбцы на строки?
- Как вы запускаете .exe с параметрами с помощью оболочки vba ()?
- Любая функция Excel, которая изменит строку?
- Сохранение нескольких листов в .pdf
- Полностью указать рабочий лист по кодовому имени
- Возвращает значения RGB из Range.Interior.Color (или любого другого свойства цвета)
Сначала вы можете выбрать, какие ячейки вы не хотите защищать (чтобы их можно было редактировать), установив статус Locked на False:
Worksheets("Sheet1").Range("B2:C3").Locked = False
Затем вы можете защитить лист, и все остальные ячейки будут защищены. Код для этого и по-прежнему позволяет вашему VBA-коду изменять ячейки:
Worksheets("Sheet1").Protect UserInterfaceOnly:=True
или
Call Worksheets("Sheet1").Protect(UserInterfaceOnly:=True)
Попробуйте использовать метод 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.
Скажем, например, в одном случае, если вы хотите заблокировать ячейки от диапазона A1 до 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"
Вы также можете сделать это на уровне листа, записанном в событии изменения рабочего листа. Если это удовлетворит ваши потребности. Позволяет динамическую блокировку на основе значений, критериев, 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
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