none
PRBLEMAS COM HABILITAÇÃO DE MACROS RRS feed

  • Pergunta

  • Olá pessoal do fórum, mais uma vez venho com dúvidas.

    O negócio é o seguinte, eu criei uma planilha no excel e para essa planilha eu criei uma tela de login no VBA para que antes que a mesma seja aberta esta tela inicie primeiro para as pessoas que autorizei.

    Tudo isso deu muito certo. No entanto, depois que terminei o trabalho habilitei todas as macros na central de confiabilidade salvei o documento e fiz uma cópia do mesmo e coloquei em um pendrive.

    Resolvi testa a abertura da planilha em um outro computador. Percebi que ao abrir a planilha em outro PC a tela de Login que criei parece não servir pra nada, pois a planilha abre primeiro para pedir para habilitar as macros novamente.

    Isso é muito chato, eu gostaria de saber se há uma maneira de tornar essa habilitação de macros permanente, mesmo que eu faça quantas cópias quiser e abra elas em qualquer computador para abrir minha tela de Login primeiramente e não a planilha com o pedido de habilitação de macros.

    Acredito que exista uma forma de fazer isso por meio do VBA criando um comando para que esse pedido de HABILITAÇÃO DE MACRO seja feito depois que o usuário iserir seu nome e senha de permissão para abrir o arquivo.

    POR FAVOR, SEI QUE ALGUÉM AQUI NO FORÚM PODE ME AJUDAR COM ISSO!

    Agradeço antecipadamente a quem vai me ajudar com uma resolução!

    GILDEÃO DIAS





    • Editado Gildeão Dias domingo, 27 de outubro de 2013 20:49 erro ortográfico
    segunda-feira, 14 de janeiro de 2013 12:54

Respostas

  • Tentando ajudar um pouco:

    Infelizmente não tenho prática com essa parte. Sou autoditada no assunto e vou aprendendo conforme a necessidade. Ainda não precisei usar o bloqueio de código e não sei te orientar adequadamente nesse assunto (também aguardo mais informações para aprender).

    O que posso te dizer, de maneira qualitativa, é o seguinte: A ideia seria ocultar "fortemente" todas as planilhas (de forma que não se possa tornar visível pelos Menus do Excel) e deixar visível apenas uma planilha "limpa" para Login. Ao mesmo tempo é preciso bloquear o código VBA com senha, para impedir acesso ao código.

    Ao "logar", as planilhas se tornariam então visíveis. Dessa forma, caso o usuário não habilite o conteúdo em VB, não será possível visualizar as planilhas.

    Para ocultar/tornar visível, use o seguinte comando (está na Ajuda do VB: F1):

    'Este exemplo cria uma nova planilha e define sua propriedade Visible como xlVeryHidden. Para referir-se à planilha, use sua variável de objeto, newSheet, como mostra a última linha do exemplo. Para usar a variável de objeto newSheet em outro procedimento, você precisa declará-la como uma variável pública (Public newSheet As Object) na primeira linha do módulo antes de qualquer procedimento Sub ou Function.
    
    Set NewSheet = Worksheets.Add
    NewSheet.Visible = xlVeryHidden
    NewSheet.Visible = True
    Um grande abraço.

    Filipe Magno

    terça-feira, 15 de janeiro de 2013 14:28
  • Ola Gildeao,

    Se sua necessidade é apenas fazer a planilha abrir sem aparecer aquela mensagem perguntando se deseja habilitar ou não as macros pode colocar a planilha dentro um local confiável e deixar um atalho dela na área de trabalho. Todos os arquivos que ficam dentro dos Locais confiáveis abrem diretamente. 

    Esses locais confiáveis geralmente estão C:\Arquivos de programas\Microsoft Office\Office12\XLSTART

    Podem haver outros e pode variar de acordo com a versão do OFFICE.

    Abraço e boa sorte

    

    terça-feira, 15 de janeiro de 2013 14:49
  • Sub Exemplo()
        Dim bLoginVálido As Boolean
        Dim sUsuário As String
        Dim sSenha As String
        
        sUsuário = InputBox("Digite o nome do usuário:")
        sSenha = InputBox("Digite a senha:")
        
        bLoginVálido = fLogin(sUsuário, sSenha)
        
        If bLoginVálido = True Then
            MsgBox "Bem vindo, " & sUsuário & "!", vbInformation
            fMain
        Else
            MsgBox "Nome de usuário e/ou senha inválidos!", vbCritical
        End If
    End Sub
    
    Function fLogin(sUsuário As String, sSenha As String) As Boolean
        Select Case sUsuário
            Case "Felipe": If sSenha = "123" Then fLogin = True
            Case "João": If sSenha = "456" Then fLogin = True
            Case "Pedro": If sSenha = "senha" Then fLogin = True
            '...adicione outras linhas
        End Select
    End Function
    
    Sub fMain()
        'O seu programa fica aqui. Essa rotina só executará se o login for efetuado.
    End Sub
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 16 de janeiro de 2013 21:26
    Moderador

Todas as Respostas

  • "eu gostaria de saber se há uma maneira de tornar essa habilitação de macros permanente"

    É impossível fazer isso. A melhor sugestão que posso te dar nesse caso é encapsular os logins e senhas dentro do VBA e colocar senha de exibição do projeto VBA ou então Ocultar a planilha que possui os logins e senhas.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 14 de janeiro de 2013 20:22
    Moderador
  • Olá, boa noite sr. Felipe Costa. Perdoe-me se eu estiver sendo inconveniente, é que sou iniciante na área de VBA.

    O sr. poderia me dá um exemplo postando um modelo prático de como faço para encapsular esses logins e senhas dentro do VBA ou como faço para ocultar a planilha com os logins?

    Pode postar um modelo dos códigos aqui?

    Perdoe a minha ignorância, camo já falei, sou novato na área, mas sou hulmilde para ser ensinado pelos mais sofisticados de conhecimento sobre programação VBA.

    Obrigado pelo ajuda, fico no aguardo!

    GILDEÃO DIAS.



    • Editado Gildeão Dias terça-feira, 15 de janeiro de 2013 01:10
    terça-feira, 15 de janeiro de 2013 00:42
  • Tentando ajudar um pouco:

    Infelizmente não tenho prática com essa parte. Sou autoditada no assunto e vou aprendendo conforme a necessidade. Ainda não precisei usar o bloqueio de código e não sei te orientar adequadamente nesse assunto (também aguardo mais informações para aprender).

    O que posso te dizer, de maneira qualitativa, é o seguinte: A ideia seria ocultar "fortemente" todas as planilhas (de forma que não se possa tornar visível pelos Menus do Excel) e deixar visível apenas uma planilha "limpa" para Login. Ao mesmo tempo é preciso bloquear o código VBA com senha, para impedir acesso ao código.

    Ao "logar", as planilhas se tornariam então visíveis. Dessa forma, caso o usuário não habilite o conteúdo em VB, não será possível visualizar as planilhas.

    Para ocultar/tornar visível, use o seguinte comando (está na Ajuda do VB: F1):

    'Este exemplo cria uma nova planilha e define sua propriedade Visible como xlVeryHidden. Para referir-se à planilha, use sua variável de objeto, newSheet, como mostra a última linha do exemplo. Para usar a variável de objeto newSheet em outro procedimento, você precisa declará-la como uma variável pública (Public newSheet As Object) na primeira linha do módulo antes de qualquer procedimento Sub ou Function.
    
    Set NewSheet = Worksheets.Add
    NewSheet.Visible = xlVeryHidden
    NewSheet.Visible = True
    Um grande abraço.

    Filipe Magno

    terça-feira, 15 de janeiro de 2013 14:28
  • Ola Gildeao,

    Se sua necessidade é apenas fazer a planilha abrir sem aparecer aquela mensagem perguntando se deseja habilitar ou não as macros pode colocar a planilha dentro um local confiável e deixar um atalho dela na área de trabalho. Todos os arquivos que ficam dentro dos Locais confiáveis abrem diretamente. 

    Esses locais confiáveis geralmente estão C:\Arquivos de programas\Microsoft Office\Office12\XLSTART

    Podem haver outros e pode variar de acordo com a versão do OFFICE.

    Abraço e boa sorte

    

    terça-feira, 15 de janeiro de 2013 14:49
  • Sub Exemplo()
        Dim bLoginVálido As Boolean
        Dim sUsuário As String
        Dim sSenha As String
        
        sUsuário = InputBox("Digite o nome do usuário:")
        sSenha = InputBox("Digite a senha:")
        
        bLoginVálido = fLogin(sUsuário, sSenha)
        
        If bLoginVálido = True Then
            MsgBox "Bem vindo, " & sUsuário & "!", vbInformation
            fMain
        Else
            MsgBox "Nome de usuário e/ou senha inválidos!", vbCritical
        End If
    End Sub
    
    Function fLogin(sUsuário As String, sSenha As String) As Boolean
        Select Case sUsuário
            Case "Felipe": If sSenha = "123" Then fLogin = True
            Case "João": If sSenha = "456" Then fLogin = True
            Case "Pedro": If sSenha = "senha" Then fLogin = True
            '...adicione outras linhas
        End Select
    End Function
    
    Sub fMain()
        'O seu programa fica aqui. Essa rotina só executará se o login for efetuado.
    End Sub
    


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 16 de janeiro de 2013 21:26
    Moderador