Considere que você tem numa Pasta de Trabalho uma Planilha (que posteriormente você deverá querer deixá-la oculta, claro) chamada
Senhas. Ela possui duas colunas:
A - Nome do atendente da da Planilha
B - Senha do atendente e de acesso à Planilha
Crie também uma Planilha chamada
Menu.
Cole o código abaixo na classe do objeto EstaPasta_de_trabalho:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Const c_sSenhas As String = "Senhas"
Const c_sMenu As String = "Menu"
Dim lAtendente As Long
Dim sSenha As String
Dim sSenhaDigitada As String
With ThisWorkbook
If Sh.Name = c_sSenhas Or Sh.Name = c_sMenu Then GoTo Fim
lAtendente = EleOf(Sh.Name, .Sheets(c_sSenhas).Columns("A"))
If lAtendente = 0 Then
MsgBox "Essa Planilha não pode ser selecionada porque " & _
"não está cadastrada na Planilha de senhas!" _
, vbCritical
GoTo Fim
Else
sSenha = .Sheets(c_sSenhas).Cells(lAtendente, "B")
sSenhaDigitada = InputBox("Digite a senha de acesso para esta Planilha:")
If sSenhaDigitada <> sSenha Then
MsgBox "Senha inválida!", vbCritical
GoTo Fim
End If
End If
End With
Exit Sub
Fim:
ThisWorkbook.Sheets(c_sMenu).Select
ThisWorkbook.Sheets(c_sMenu).Activate
End Sub
Function EleOf(ByVal vTermo As Variant, ByVal vVetor As Variant) As Long
'Retorna o número da linha ou coluna de uma célula numa linha ou coluna.
'Se vVetor for uma Variant(), retorna o índice do elemento no vetor.
'Caso não seja encontrada nenhuma ocorrência, é retornado 0.
On Error Resume Next
Select Case TypeName(vVetor)
Case "Range"
If vVetor.Columns.Count = 1 Then
'vVetor é uma coluna
EleOf = WorksheetFunction.Match(vTermo, vVetor, 0) + vVetor.Row - 1
ElseIf vVetor.Rows.Count = 1 Then
'vVetor é uma linha
EleOf = WorksheetFunction.Match(vTermo, vVetor, 0) + vVetor.Column - 1
End If
Case "Variant()"
EleOf = WorksheetFunction.Match(vTermo, vVetor, 0)
End Select
End Function