Notifications
Clear all

[Dúvida] Limitar acesso à macro / Esconder atalho

5 Posts
2 Usuários
0 Reactions
772 Visualizações
(@rafaw)
Posts: 2
New Member
Topic starter
 

Bom dia! :D

Criei uma macro para proteger todas as planilhas e uma para desproteger... até ai tudo bem!

a de proteger, ao ser acionada, abre um inputbox pedindo uma senha para proteger as planilhas
e a de desproteger abre outro inputbox pedindo a senha para desbloquear..

Gostaria de bloquear o acesso dos usuários à macro de proteção e liberá-lo somente ao chefe do departamento (se possível, fazer isso por meio de botões.. caso não seja possível, tudo bem)!
O problema é que não tive nenhuma ideia mirabolante para tal feito. :cry:
___________________________________

Pensei nas seguintes soluções:

1- Esconder o atalho da macro que bloqueia todas as planilhas, (mas ainda sim, se o usuário pressionar CTRL + SHIFT + A, ele vai receber uma mensagem pedindo para inserir a senha para bloquear a planilha.)
2 - Restringir o acesso de acordo com o usuário do computador (não sei se é possível)
3 - Colocar uma senha no botão para ser clicável somente pela pessoa que souber tal senha.
4 - Pedir ajuda no planilhando :lol:

Agradeço desde já a quem puder me ajudar!!

Aqui estão os códigos, caso isso ajude!

Sub ProtectAll()
    Dim S As Object
    Dim pWord1 As String, pWord2 As String
    pWord1 = InputBox("Por favor insira sua senha.")
    If pWord1 = "" Then Exit Sub
    pWord2 = InputBox("Repita a senha.")
     
    If pWord2 = "" Then Exit Sub
     ''verifica se as senhas são iguais
    If InStr(1, pWord2, pWord1, 0) = 0 Or _
    InStr(1, pWord1, pWord2, 0) = 0 Then
        MsgBox "As senhas são diferentes! Tente novamente."
        Exit Sub
    End If
    For Each ws In Worksheets
        ws.Protect Password:=pWord1, DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowSorting:=True, AllowFiltering:=True
    Next
    MsgBox "Todas as abas estão protegidas."
    Exit Sub
     
End Sub


Sub UnProtectAll()
    Dim S As Object
    Dim pWord3 As String
    pWord3 = InputBox("Por favor insira sua senha.")
    If pWord3 = "" Then Exit Sub
    For Each ws In Worksheets
        On Error GoTo errorTrap1
        ws.Unprotect Password:=pWord3
    Next
    MsgBox "Todas as abas estão desprotegidas."
    Exit Sub
     
errorTrap1:
    MsgBox "Senha incorreta!"
    Exit Sub
     
     
End Sub

Muito obrigado!

 
Postado : 02/12/2013 7:02 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Seu melhor aliado, será a Pesquisa do fórum, eu me lembro de ter postado algo assim.
mas..tente algo assim...

Sub Exemplo1()
ActiveSheet.Unprotect "SuaSenha"
If Environ("username") = Range("A1") Then
    Range("C24").Locked = False
Else
    Range("C24").Locked = True
End If
ActiveSheet.Protect "SuaSenha"
End Sub
Option Explicit
Option Compare Text

Private Sub test()
    Select Case Application.UserName
        Case "User", "User2", "User3"
            Plan1.Unprotect Password:="SuaSenha"
        Case Else
    End Select
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NewValue As Variant, OldValue As Variant
    If Target.Count > 1 Then Exit Sub

    If Not Intersect(Target, Range("A1:F10")) Is Nothing Then
        NewValue = Target.Value
        Application.EnableEvents = False
        Application.Undo
        OldValue = Target.Value
        If OldValue = "" Then
           Target.Value = NewValue
        ElseIf InputBox("enter password") = "pwd" Then
           Target.Value = NewValue
      Else: MsgBox "Você não pode alterar o conteudo da celula.", 16, "Células Bloqueadas"
        Target.Value = OldValue
    
        End If
        Application.EnableEvents = True
    End If
End Sub

outra fonte:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=412
Att

 
Postado : 02/12/2013 7:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia Rafaw,

Tenta assim:

Function UsuarioRede() As String
    Dim GetUserN
    Dim ObjNetwork
    Set ObjNetwork = CreateObject("WScript.Network")
    GetUserN = ObjNetwork.UserName
    UsuarioRede = GetUserN
End Function

Sub ProtectAll()
    Dim S As Object
    Dim pWord1 As String, pWord2 As String
    pWord1 = InputBox("Por favor insira sua senha.")
    If pWord1 = "" Then Exit Sub
    pWord2 = InputBox("Repita a senha.")
    
    If UsuarioRede = "NOME DO USUARIO CHEFE" Then
        GoTo ProtTudo
    End If
    If pWord2 = "" Then Exit Sub
     ''verifica se as senhas são iguais
    If InStr(1, pWord2, pWord1, 0) = 0 Or _
    InStr(1, pWord1, pWord2, 0) = 0 Then
        MsgBox "As senhas são diferentes! Tente novamente."
        Exit Sub
    End If
ProtTudo:
    For Each ws In Worksheets
        ws.Protect Password:=pWord1, DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowSorting:=True, AllowFiltering:=True
    Next
    MsgBox "Todas as abas estão protegidas."
    Exit Sub
     
End Sub

É só adaptar para desproteger.

Qualquer coisa da o grito.
Abraço

 
Postado : 02/12/2013 7:19 am
(@rafaw)
Posts: 2
New Member
Topic starter
 

opa, obrigado pelas respostas

@alexandrevba

juro que pesquisei e nao tinha achado nada parecido com o que eu estava querendo :(
mas de qualquer modo, obrigado...

não entendi o que fazer com o primeiro e o segundo código....
o segundo eu vou atribuir ao botão?

mas o outro deu certo aqui!!! muito obrigado

@Bernardo

obrigado pela ajuda também..
vou deixar o outro código rodando... caso eu veja algum problema vou tentar trocar por esse seu!

 
Postado : 02/12/2013 8:29 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

O 1º e o 2º era só para se ter uma ideia de como usar baseado em username, o terceiro tem um detalhe, o usuário pode escrever uma única vez os dados na planilha (guia), mas caso queira alterar ou deletar, terá que ter permissão.

Att

 
Postado : 02/12/2013 8:34 am