Usuário com melhor resposta
PRBLEMAS COM HABILITAÇÃO DE MACROS

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
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
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 15 de janeiro de 2013 15:07
- Marcado como Resposta Hezequias VasconcelosModerator terça-feira, 22 de janeiro de 2013 21:59
-
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
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 15 de janeiro de 2013 15:07
- Marcado como Resposta Hezequias VasconcelosModerator terça-feira, 22 de janeiro de 2013 21:59
-
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
- Sugerido como Resposta Hezequias VasconcelosModerator quinta-feira, 17 de janeiro de 2013 09:33
- Marcado como Resposta Hezequias VasconcelosModerator terça-feira, 22 de janeiro de 2013 21:59
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
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 15 de janeiro de 2013 15:07
- Não Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 15 de janeiro de 2013 15:07
-
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
-
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
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 15 de janeiro de 2013 15:07
- Marcado como Resposta Hezequias VasconcelosModerator terça-feira, 22 de janeiro de 2013 21:59
-
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
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 15 de janeiro de 2013 15:07
- Marcado como Resposta Hezequias VasconcelosModerator terça-feira, 22 de janeiro de 2013 21:59
-
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
- Sugerido como Resposta Hezequias VasconcelosModerator quinta-feira, 17 de janeiro de 2013 09:33
- Marcado como Resposta Hezequias VasconcelosModerator terça-feira, 22 de janeiro de 2013 21:59