Opções de proteção do Excel - quando diferentes áreas precisam ser atualizadas por diferentes equipes

0

Ao usar a proteção por senha no Excel 7 - quais opções você possui que não exigem que você insira novamente a senha antes de salvar / fechar o arquivo - ou seja, mantê-la protegida caso se esqueça de digitar novamente a senha? senha ao fechar.

Eu costumo usar o processo Salvar como - Opções gerais - como você não precisa redigitar a senha antes de fechar / salvar, no entanto eu preciso incluir um intervalo de células que outra pessoa pode mudar (sem ter acesso a tudo) como bem como ter a planilha geral para permanecer como somente leitura para outra equipe.

Então eu preciso de 3 níveis de acesso - 2 com senhas e um terceiro como somente leitura.

    
por Leanne 16.02.2012 / 07:24

2 respostas

2

Não é possível fazer isso em uma pasta de trabalho do Excel. Você deve tentar dar pastas de trabalho diferentes para equipes diferentes e, em seguida, fazer com que elas apontem uma para a outra para preencher os dados ausentes.

    
por 16.02.2012 / 08:03
0

Se você não quiser usar macros, não há muito o que fazer. O processo de Opções Gerais é a única maneira de você não precisar redigitar uma senha antes de salvar. Se você tiver uma guia de planilha separada para cada usuário que possa inserir, poderá ter uma senha separada ao proteger no nível da planilha, mas precisará se lembrar de proteger novamente a planilha.

Com macros, mais coisas se tornam possíveis. Aqui está como eu configuraria.

  1. Salve sua pasta de trabalho como um arquivo de macro (.xlsm).
  2. Crie três intervalos nomeados, um que inclua todas as células que o usuário 1 pode alterar, uma com todas as células que o usuário 2 pode alterar e uma com todas as células (usuário 1 & usuário 2) que podem ser alteradas. Verifique se os intervalos nomeados estão definidos no nível da pasta de trabalho, não no nível da planilha.
  3. Alterne para o editor do Visual Basic.
  4. Adicione o código abaixo à sua pasta de trabalho. A primeira parte vai em ThisWorkbook , o segundo & as terceiras partes entram em módulos de código regulares. (Para adicionar um módulo, clique em Insert - > Module .)
  5. Modifique as constantes no módulo de código para corresponder às senhas e intervalos nomeados desejados.
  6. Como as senhas são texto simples na macro, você precisa bloquear o projeto do VBA para que ninguém possa visualizá-lo. Clique em Tools - > VBAProject Properties... , em seguida, selecione a guia Protection . Verifique Lock project for viewing e insira uma senha. (Eu geralmente não me preocupo em fazer isso. A maioria dos meus usuários não são experientes em tecnologia o suficiente para encontrar as senhas e eu estou apenas tentando proteger de qualquer dano acidental ou irrefletido.)
  7. Salve a pasta de trabalho alterada.

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

Code Module1:

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

Code Module2:

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

Este código funciona da seguinte maneira: Quando a pasta de trabalho for aberta, ela solicitará uma senha. Se a senha fornecida corresponder a uma das senhas conhecidas, ela desbloqueará o intervalo nomeado que acompanha essa senha. Se o usuário não desbloquear no aberto, eles podem desbloquear a qualquer momento, executando a macro UnlockInputCells. Antes que a pasta de trabalho seja salva, ela bloqueará automaticamente todas as células de entrada do usuário.

    
por 17.02.2012 / 23:37