0108-Controlando o acesso às planilhas via VBA

O Excel não é, com certeza, um aplicativo que possui um alto nível de segurança. Há diversas referências na net que permitem a quebra de senhas e o acesso às informações armazenadas nas pastas de trabalho.

Planilhas, linhas e colunas ocultas podem ser facilmente reexibidas e exploradas por usuários com um nível de conhecimento intermediário.

Podemos dificultar o acesso às informações reservadas utilizando alguns recursos do próprio Excel.

– Proteção do projeto VBA: É bem mais difícil acessar as informações dos códigos se o respectivo projeto estiver protegido.

– Proteção das planilhas via VBA: Criando senhas aleatórias via VBA podemos dificultar o trabalho de quebrar as senhas, pois teria que ser refeito a cada vez que o arquivo fosse acessado.

– Ocultar as planilhas via VBA: A propriedade Visible dos objetos Worksheet e Sheet podem assumir três valores: xlSheetVisible (Visível), xlSheetHidden (Oculta) e xlSheetVeryHidden (“Muito Oculta”). Ao definirmos o valor como xlSheetVeryHidden, não é possível reexibir a planilha através das opções da interface do usuário, apenas através de outros códigos de macro.

O arquivo Teste de navegação trabalha com os conceitos acima. A idéia é que possa ser utilizado como base para que desenvolvam projetos similares.

O projeto VBA está protegido com a senha : UsuariosExcel_2011

O arquivo possui 4 planilhas

Interface, Ex.1, Ex.2 e Setup. As três primeiras não possuem quaisquer informações, apenas botões que ativam as macros para navegação e um intervalo de células desprotegidas para receber informações. (Ao desenvolverem seus projetos, é importante definir adequadamente estes intervalos, pois devido à forma como o arquivo foi estruturado)A planilha Setup é utilizada para armazenamento da senha de proteção que é gerada a cada vez que o arquivo é aberto.

Códigos VBA utilizados.

Eventos de Pasta de Trabalho:

Private Sub Workbook_Open()
'Este código será executado todas as vezes que o arquivo
'for aberto

'Definir uma variável objeto Worksheet
Dim ws As Worksheet
'Definir a variável Senha
Dim Senha As String
'Atribuir o valor de Setup.A1 para senha
Senha = CStr(Sheets("Setup").[A1])

'Tornar visível a planilha Interface
Worksheets("Interface").Visible = xlSheetVisible
'Loop para as planihas desta pasta de trabalho
For Each ws In ThisWorkbook.Worksheets
'Serão ocultas (xlVeryHidden) todas as planilhas diferentes
'de "Interface"
If ws.Name  "Interface" Then ws.Visible = xlVeryHidden
'Desproteger a planilha ws
ws.Unprotect (Senha)
Next ws

'Na célula A1 da planilha Setup, é inserido um número aleatório
'de seis dígitos que será utilizado como senha durante a sessão
Sheets("Setup").[A1] = CLng(Rnd * (999999 - 100000) + 100000)
'Redefinir a variável senha
Senha = CStr(Sheets("Setup").[A1])

For Each ws In ThisWorkbook.Worksheets
'Proteger a planilha ws
ws.Protect (Senha)
'Apenas as células desbloqueadas poderão ser selecionadas
.EnableSelection = xlUnlockedCells
Next ws

End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Este código será executado sempre que uma planilha
'for ativada

'Definir a variável Senha
Dim Senha As String

'Atribuir para senha o valor armazenado em Setup.A1 como
'um String
Senha = CStr(Sheets("Setup").[A1])

With Sh
'Proteger a planilha utilizando a variável Senha como password
.Protect (Senha)
'Apenas as células desbloqueadas poderão ser selecionadas
.EnableSelection = xlUnlockedCells
End With
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
'Este código será executado sempre que uma planilha
'deixar de ser a planilha ativa

'Definir a variável Senha
Dim Senha As String

'Atribuir para senha o valor armazenado em Setup.A1 como
'um String
Senha = CStr(Sheets("Setup").[A1])

With Sh
'Ocultar a planilha
.Visible = xlVeryHidden
'Proteger a planilha utilizando a variável Senha como password
.Protect (Senha)
End With
End Sub

Macros para navegação entre planilhas (módulo Navegar):

Sub Ex1_Clique()
    With Sheets("Ex. 1")
        .Visible = xlSheetVisible
        .Select
    End With
End Sub
Sub Ex2_Clique()
    With Sheets("Ex. 2")
        .Visible = xlSheetVisible
        .Select
    End With
End Sub
Sub Interface_Clique()
    With Sheets("Interface")
        .Visible = xlSheetVisible
        .Select
    End With
End Sub

In Excel We Trust

Marcado com: , , , , ,
Publicado em Nível: Avançado
7 comentários em “0108-Controlando o acesso às planilhas via VBA
  1. Flavio disse:

    Aqui o arquivo baixou e quando abriu o Excel deu erro. Ficou “Not responding” por pelo menos 3 minutos. Abortei o processo. Vou tentar abrir em outra máquina (usando Excel 2007, genuínio – naturalmente).

  2. João disse:

    Amigo, estou tentando adaptar a coisa aqui mais não tá dando certo. O que eu queria fazer é o seguinte, ao abrir o workbook, ocultar todas as planilhas e exibir um formulário de login. Nesse formulário de login eu checo user e pass. Estando tudo certo, deveria fechar o form e reexibir as planilhas. Então, o que eu estou tentando é colocar as linhas abaixo no evento Open do Workbook:

    ‘—————————————————————
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
    ws.Visible = xlSheetHidden
    Next ws

    frmLogin.Show
    ‘—————————————————————

    E no clique do botão de login do formulário:

    ‘—————————————————————
    If Usuario.Text = “joao” And Senha.Text = “minhasenha” Then

    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
    ws.Visible = xlSheetVisible
    Next ws

    End

    Else
    MsgBox “Usuário e/ou senha inválido(s)”
    End If
    ‘—————————————————————

    Mas dá Erro em tempo de execução ‘1004’:
    O método ‘Visible’ do objeto ‘_Worksheet’ falhou

    Já olhei as referências e está tudo certo. No seu exemplo funciona mas no meu está dando esse erro. Será que consegues me dar uma luz de onde estou a errar?

  3. Rodrigo disse:

    Olá, poderia me enviar a planilha, pois, não consigo baixa-la.

    Abç!

  4. Your web page does not render properly on my i phone – you may wanna try and fix that

  5. Carlos disse:

    Prezado,

    Executei todos os procedimentos sugeridos para desproteger uma planilha.No entanto,quando no momento que executo o código o excel exibe a seguinte alerta: Não é possível definir a propriedade visible da classe worksheet.No trabalho não tem sujeito que consiga exibir..

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Visitas dos usuários
  • 1,969,548

Clique para assinar este blog e receber notificações de novos artigos por email.

Junte-se a 1.477 outros seguidores

Aumente sua interação

Siga-nos do twitter (@usuariosdoexcel).

Acesse o nosso fórum e compartilhe as suas dúvidas.

Curta nossa página no Facebook.

Junte-se ao grupo do LinkedIn.

Visite-nos utilizando o seu smartphone ou tablet.

Recomende este Blog
Visualizar notícias
Site monitorado:
Real Time Web Analytics

Clicky

%d blogueiros gostam disto: