Как заблокировать данные в ячейке в excel с помощью vba

Я хочу, чтобы другие не редактировали содержимое ячейки на моем листе excel, используя VBA. Можно ли сделать это?

Сначала вы можете выбрать, какие ячейки вы не хотите защищать (чтобы их можно было редактировать), установив статус 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 
  • Форматы дат Excel VBA
  • Как скопировать данные из закрытых книг (их закрытие) в основную книгу с помощью VBA
  • Совокупность, сортировка и перенос строк в столбцы
  • Как я могу убить процессы диспетчера задач с помощью кода VBA?
  • Excel VBA циклически перемещается по нескольким листам
  • Автоматически перемещать удаленные элементы Outlook в архивную папку через две недели
  • Excel VBA для экспорта выбранных листов в PDF
  • Lookbehind в regex для VBA?
  • Обновить результаты функции Excel VBA
  • Эквивалентная cURL в VBA?
  • Макрос для экспорта таблиц MS Word в листы Excel
  • Давайте будем гением компьютера.