При использовании защиты паролем в Excel 7 - какие опции у вас есть, которые не требуют повторного ввода пароля перед сохранением / закрытием файла - т.е. чтобы сохранить его защищенным, если вы забыли повторно ввести пароль при закрытии ,

Я обычно использую процесс «Сохранить как - Общие параметры» - поскольку вам не нужно повторно вводить пароль перед закрытием / сохранением, однако мне нужно включить диапазон ячеек, которые другой человек может изменить (не имея доступа ко всему), а также иметь общая таблица должна оставаться для чтения только для других сотрудников.

Поэтому мне нужно 3 уровня доступа - 2 с паролями и 3-й только для чтения.

2 ответа2

2

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

0

Если вы не хотите использовать макросы, вы не можете ничего сделать. Процесс «Общие параметры» - единственный способ повторного ввода пароля перед сохранением. Если у вас есть отдельная вкладка рабочего листа для каждого пользователя, который может вводить данные, у вас может быть отдельный пароль, обеспечивающий защиту на уровне листа, но вам необходимо помнить, чтобы повторно защитить рабочий лист.

С макросами становится возможным больше вещей. Вот как я бы это настроил.

  1. Сохраните вашу книгу как файл макроса (.xlsm).
  2. Создайте три Именованных Диапазона, один, который включает все ячейки, которые может изменить пользователь 1, один со всеми ячейками, которые может изменить пользователь 2, и один со всеми ячейками (пользователь 1 и пользователь 2), которые могут быть изменены. Убедитесь, что именованные диапазоны установлены на уровне рабочей книги, а не на уровне рабочей таблицы.
  3. Переключитесь на редактор Visual Basic.
  4. Добавьте приведенный ниже код в вашу книгу. Первая часть находится в ThisWorkbook , вторая и третья части - в обычных модулях кода. (Чтобы добавить модуль, нажмите Insert -> Module .)
  5. Измените константы в модуле кода, чтобы они соответствовали желаемым паролям и именованным диапазонам.
  6. Поскольку в макросе пароли представляют собой обычный текст, вам необходимо заблокировать проект VBA, чтобы никто не мог его просмотреть. Нажмите Tools -> VBAProject Properties... затем выберите вкладку Protection . Проверьте Lock project for viewing и введите пароль. (Обычно я не пытаюсь это сделать. Большинство моих пользователей недостаточно разбираются в технологиях, чтобы найти пароли, и я все равно пытаюсь защитить их от случайного или бездумного повреждения.)
  7. Сохраните измененную книгу.

ThisWorkbook:

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   LockUser GetUserInputRange(AllInputCells:=True)
End Sub

Private Sub Workbook_Open()
   UnlockInputCells
End Sub

Код модуля 1:

Option Explicit

Public Const PWD_REAL As String = "test"    ' this is the password the worksheet is actually locked with
Public Const PWD_INPUT1 As String = "test1" ' password to unlock NAMED_RANGE1
Public Const PWD_INPUT2 As String = "test2" ' password to unlock NAMED_RANGE2

Public Const NAMED_RANGE1 As String = "Name1"  ' Named Range for user 1
Public Const NAMED_RANGE2 As String = "Name2"  ' Named Range for user 2
Public Const NAMED_ALL As String = "AllCells"  ' Named Range that includes all input cells

Код модуля 2:

Option Explicit

Sub UnlockInputCells()
   UnlockUser GetUserInputRange
End Sub
Sub LockInputCells()
   LockUser GetUserInputRange
End Sub

'-----------------------------------------------
Function GetUserInputRange(Optional AllInputCells As Boolean = False) As Range
   Dim rng As Range, strInputMsg As String

   Set rng = Nothing
   strInputMsg = "Enter your password to edit." & vbCrLf & vbCrLf _
               & "Press cancel if you just want to look at the report."

   If AllInputCells Then
      Set rng = ThisWorkbook.Names(NAMED_ALL).RefersToRange
   Else
      Select Case InputBox(strInputMsg)
      Case PWD_INPUT1
         Set rng = ThisWorkbook.Names(NAMED_RANGE1).RefersToRange
      Case PWD_INPUT2
         Set rng = ThisWorkbook.Names(NAMED_RANGE2).RefersToRange
      Case PWD_REAL
         Set rng = ThisWorkbook.Names(NAMED_ALL).RefersToRange
      End Select
   End If

   Set GetUserInputRange = rng

End Function

Private Sub UnlockUser(rngInput As Range)
   Dim sht As Worksheet

   If Not rngInput Is Nothing Then

      ' unprotect the worksheet
      Set sht = rngInput.Parent
      sht.Unprotect PWD_REAL

      ' unlock given user input cells
      With rngInput
         .Locked = False
         .Interior.Color = XlRgbColor.rgbAliceBlue
         .Range("A1").Select
      End With

      ' reprotect the worksheet
      sht.Protect PWD_REAL
      MsgBox "Your input cells have been unlocked."

   End If

End Sub

Sub LockUser(rngInput As Range)
   Dim sht As Worksheet

   If Not rngInput Is Nothing Then
      ' If the range includes locked and unlocked cells, .Locked returns Null
      If Not rngInput.Locked Or IsNull(rngInput.Locked) Then

         ' unprotect worksheet
         Set sht = rngInput.Parent
         sht.Unprotect PWD_REAL

         ' lock given user fields
         With rngInput
            .Locked = True
            .Interior.ColorIndex = xlColorIndexNone
         End With

         ' reprotect worksheet
         sht.Protect PWD_REAL

      End If
   End If

End Sub

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .