Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Apagar codigo se senha for quebrada

Dúvidas gerais sobre Excel
Felipe Dasi
Colaborador
Colaborador
Mensagens: 54
Registrado em: Seg Jul 05, 2010 6:56 am

Re: Apagar codigo se senha for quebrada

Mensagem por Felipe Dasi »

Tomás e Amigos..

Estou na ativa para ajudar e ser ajudado(rs). Posto o codigo abaixo, precisa ser aprimorado, mas pelo que vi funciona, caso a senha seja quebrada.
Ah. Desculpem se não postei na forma do forum, foi a primeira vez. Abs. Felipe Dasi

Código: Selecionar todos

‘PARA APAGAR O VBA AO QUEBRAR A SENHA
‘ANTES DE PASSAR A PLANILHA PRO USUARIO TIRE A SENHA DE A1 E SALVE.
‘AO FAZER ISSO, O USUARIO USA A PLANILHA NORMALMENTE, MAS SE QUEBRAR A SENHA O PROJETO VBA APAGA E/OU DÁ ERRO DE ABERTURA.

NESTA PASTA DE TRABALHO:
Option Explicit

Private Sub Workbook_Open()

      
      If Application.Version > 9 Then
            Dim VisualBasicProject As Object
            On Error Resume Next
            Set VisualBasicProject = ActiveWorkbook.VBProject
            If Not Err.Number = 0 Then
                
      End If
      'DESABILITA ESC E INICIA RELOGIO
      Application.EnableCancelKey = xlDisabled
      Run "IniciaRelogio"
      End If
End Sub

'
'TODAS AS POSSIBILIDADES
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
      Run "ParaRelogio"
      'PODE COLOCAR CODIGO PROPRIO AQUI
      Run "IniciaRelogio"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
      Run "ParaRelogio"
      'PODE COLOCAR CODIGO PROPRIO AQUI
      Run "IniciaRelogio"
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
      Run "ParaRelogio"
      'PODE COLOCAR CODIGO PROPRIO AQUI
      Run "IniciaRelogio"
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      Run "ParaRelogio"
      'PODE COLOCAR CODIGO PROPRIO AQUI
      Run "IniciaRelogio"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
      Run "ParaRelogio"
      'PODE COLOCAR CODIGO PROPRIO AQUI'
End Sub


ACESSE O VBA
ABRA UM MODULO E COLOQUE ESTE CODIGO

'Se a senha em A1 for igual a 123
'Se a senha em Comentários em propriedades da Planilha = 456
'Se a senha do VBA = 123
'RESULTADO O projeto VBA é aberto
'Resumindo, se uma das senha não bater o VBA é apagado
'Se você tirar a senha de A1 e Salvar, a planilha pode ser usada normalmente, mas
' se o usuário quebrar a senha, ao acessar o modulo o VBA serás apagado.
Option Explicit

Public IdleTime As Date

Private Sub DeletaVBA()
      With ThisWorkbook
            If Plan1.[A1] = "123" _
               And .BuiltinDocumentProperties("Comments") = "456" Then
                  'COLOCANDO A SENHA CORRETA DO VBA E MANTENDO AS OUTRAS DUAS EM A1 E EM PROPRIEDADES O RELOGIO NÃO É ATIVADO.
               'CASO CONTRARIO O RELOGIO É ATIVADO E EM 5 SEGUNDOS O PROJETO VBA SERÁ APAGADO.
                  Run "ParaRelogio"
                  Exit Sub
            Else
                  If .VBProject.Protection = 0 Then   'unlocked
                        Run "ParaRelogio"

                        Dim Component As Object

                        ' AQUI DELETA TODOS MODULOS DO VBA
                        For Each Component In .VBProject.VBComponents
                              With Component.CodeModule
                                    .DeleteLines 1, .CountOfLines
                              End With
                        Next

                        'SALVA AS ALTERAÇÕES FEITAS NA PLANILHA
                        .Save
                        'SE QUISER COLOCAR UMA MENSAGEM
                          MsgBox "SENHA(S) INCORRETA(S) - " & _
                               "TODOS OS MODULOS SERÃO APAGADOS... :o)"
                        Workbooks.Open (.FullName)
                        .Close
                  Else
                        'INICIA A CONTAGEM DO RELOGIO SE VBA FOR QUEBRADO
                        Run "IniciaRelogio"
                  End If
            End If
      End With
      Exit Sub

End Sub




Private Sub IniciaRelogio()

            
      If Plan1.[A1] = "123" _
         And ThisWorkbook.BuiltinDocumentProperties("Comments") = "456" _
         Then Exit Sub

            'AQUI É O TEMPO DE ABERTURA DO VBA
      IdleTime = Now + TimeValue("00:00:05")
      
      Application.OnTime IdleTime, "DeletaVBA"
End Sub

Private Sub ParaRelogio()
      On Error Resume Next
      Application.OnTime EarliestTime:=IdleTime, _
                         Procedure:="DeletaVBA", Schedule:=False
End Sub
Editado pela última vez por Felipe Dasi em Ter Jul 27, 2010 11:37 am, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


betoacunha
Colaborador
Colaborador
Mensagens: 27
Registrado em: Qua Jul 07, 2010 1:38 pm

Re: Apagar codigo se senha for quebrada

Mensagem por betoacunha »

Felipe ...

Como sempre em grande estilo ... Vou guardar e estudar este !!!

Grande Abraço

Beto Cunha


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Apagar codigo se senha for quebrada

Mensagem por webmaster »

Felipe,

Testei aqui e funcionou. Muito bom! É uma solução e tanto. Importa-se se colocá-la no blog?

Abraços


Felipe Dasi
Colaborador
Colaborador
Mensagens: 54
Registrado em: Seg Jul 05, 2010 6:56 am

Re: Apagar codigo se senha for quebrada

Mensagem por Felipe Dasi »

Bom dia, claro que não, ai o pessoal aprimora...


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Apagar codigo se senha for quebrada

Mensagem por Guima »

Parabens Felipe !!!

Funcionou perfeitamente, ja estou adaptando para as minhas necessidades. Estou retirando o método Ontime, porque ele costuma gerar alguns erros no arquivo, quando fica em atividade se haver mudanças no arquivo, mas a rotina em si, funciona muitissimo bem !!!! NOTA 11 pra vc !!!!!

Abraco


Felipe Dasi
Colaborador
Colaborador
Mensagens: 54
Registrado em: Seg Jul 05, 2010 6:56 am

Re: Apagar codigo se senha for quebrada

Mensagem por Felipe Dasi »

Realmente dá erro, principalmente na reabertura da planilha, mas o importante é que de uma forma (com erro) ou sem, não conseguem ver o codigo, Valeu abração, depois posta o codigo enxuto.


extremejr
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Ter Ago 17, 2010 6:12 pm

Re: Apagar codigo se senha for quebrada

Mensagem por extremejr »

Bom Dia pessoal!

Onde coloco essa senha:

"'Se a senha em Comentários em propriedades da Planilha = 456"

Abraços


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Apagar codigo se senha for quebrada

Mensagem por Guima »

Olá Felipe,

Conforme já havia mencionado estou testando a rotina criada por você. No Excel 2003, ela funcionou sem qualquer problema. Porém no Excel 2007, é necessário configurar antes a Central de Confiabilidade, caso contrário irá informar o seguinte erro: " o acesso de programação ao projeto do visual basic não é confiável"

Com isso, as rotinas em VBA são desabilitadas e é possível quebrar a senha. Desconheço se há meios de configurar a Central de confiabilidade via VBA, mas caso seja talvez resolva o problema.

Abraços


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Apagar codigo se senha for quebrada

Mensagem por Guima »

Olá gente.

Após muitas tentativas consegui adaptar a rotina do Dasi para meu arquivo. Porém, basta antes de abrir o arquivo desabilitar as macro, que a rotina não será efetuada quando a senha for quebrada. Por conta disso, fiquei pensando em alguma solução paralela. haveria como criptografar a planilha, caso as macros sejam desabilitadas, ou mesmo a criação de uma .dll que faça a rotina do Felipe, ou até um .bat que se auto-execute toda vez que o Excel for aberto.

Abs


brunoclc
Acabou de chegar
Acabou de chegar
Mensagens: 2
Registrado em: Qui Mar 10, 2011 12:49 am

Re: Apagar codigo se senha for quebrada

Mensagem por brunoclc »

Um ótimo código, o problema está apenas na central de confiabilidade, acho que uma provavel solução seria criar um instalador e instalar o arquivo na pasta "C:\Program Files\Microsoft Office\Office14\XLSTART\" que é um local confiavel e compilar um executavel q fizesse a seguinte rotina:

Abrir
open 'C:\Program Files\Microsoft Office\Office14\XLSTART\'

se erro next

'sistema x64 arquivo nos arquivos x86, ou arquivo ausente

next

open 'C:\Program Files(x86)\Microsoft Office\Office14\XLSTART\"

se erro

msgBox "Arquivo não encontrado!"

e compilar um executavel, instalar em arquivos de programas/Seu projeto, e enviar atalho para area de trabalho.

dai aliando isso ao codigo que desabilita os menus e botoes de fechar e barras de ferramentas não há como saber onde está o arquivo original e consequentemente não há como copiar o arquivo pra um local não seguro pra macros.

a não ser que ele veja os arquivos recentes... kkkkkkkkkkkkk

ai fizemos nada!

nussa complicado isso ein! se alguem pudesse fazer essa rotina em C# compilar e integrar seria fod4.

UP!!!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder