как разблокировать ячейки на защищенном рабочем листе, созданном VBA - PullRequest
0 голосов
/ 04 марта 2011

Входной файл данных обрабатывается с использованием VBA для создания электронной таблицы, защищенной Excel (2003) (Invoice). Затем электронная таблица должна быть разослана в другие офисы, где в некоторые назначенные ячейки должны быть внесены изменения. Как я могу создать рабочий лист, чтобы эти ячейки могли быть изменены, когда весь лист защищен? Я попытался использовать приведенный ниже код и другие подобные варианты, но, похоже, он не работает. Вы можете помочь?

Private Sub CellLock1()

  Cells.Select
  ' unlock all the cells
  Selection.Locked = False

  ' lock only these cells
  Range("J49:K49").Select
  Selection.Locked = True

 ActiveSheet.Protect DrawingObjects:=True, _
                     Contents:=True, _
                     Scenarios:=True, _
                     UserInterfaceOnly:=True, _
                     AllowFormattingCells:=True, _
                     AllowFormattingColumns:=True, _
                     AllowFormattingRows:=True, _
                     AllowInsertingColumns:=True, _
                     AllowInsertingRows:=True, _
                     AllowInsertingHyperlinks:=True, _
                     AllowDeletingColumns:=True, _
                     AllowDeletingRows:=True, _
                     AllowSorting:=True, _
                     AllowFiltering:=True, _
                     AllowUsingPivotTables:=True

End Sub

Ответы [ 2 ]

2 голосов
/ 22 сентября 2012

Это может быть немного поздно ... но я надеюсь, что здесь помогут следующие шаги:

  1. Блокировка рассматриваемого листа
  2. Просмотр кода для создания частногоПодпрограмма (Лист правой кнопкой мыши -> Просмотреть код -> Выбрать «Объекты Microsoft Excel», соответствующие этому листу)
  3. Вставить этот код:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim ws As Worksheet
    Dim inputRange As Range
    
    
    Set ws = Worksheets("WorkSheetName")
    'tell this sub to unprotect only these cells
    Set inputRange = Range("I5,I7,I11")
    
    
    ' If the selected cell is not in the range keep the sheet locked
    If Intersect(Target, inputRange) Is Nothing Then
    'else unprotect the sheet by providing password 
    '(same as the one that was used to protect this sheet)
    Else
    
        ws.Unprotect Password:="password"
        Target.Locked = False
        ws.Protect Password:="password"
    
    End If
    
    End Sub
    
2 голосов
/ 04 марта 2011

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

Невозможно разблокировать ячейки, даже используя код VBA, если лист защищен. Поэтому, если вы хотите использовать код для разблокировки некоторых ячеек, сначала снимите защиту с рабочей книги / листа.

Пожалуйста, попробуйте мой код:

Sub UnlockCells()

Sheet1.Unprotect
Sheet1.Range("A1", "B6").Locked = False 'Unlock the range A1 to B6
Sheet1.Cells(6, 6).Locked = False 'Unlock the cell F6
Sheet1.Protect

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...