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.
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.
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.
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.
ThisWorkbook
, o segundo & as terceiras partes entram em módulos de código regulares. (Para adicionar um módulo, clique em Insert
- > Module
.) 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.) 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.