Modificação VBA Exp...
 
Notifications
Clear all

Modificação VBA Expiração Planilha

13 Posts
3 Usuários
0 Reactions
2,403 Visualizações
(@scainet)
Posts: 33
Trusted Member
Topic starter
 

Bom dia pessoal
Eu encontrei um código VBA que faz com que a planilha tenha uma data de validade.
Achei interessante, mas eu preciso fazer uma modificação nele. Só não sei como.

Eu queria que a planilha expirasse após um tempo específico.
Por exemplo: a pessoa acessa a planilha e tem 5 minutos para trabalhar. Após os 5 min a planilha irá expirar e forçar o fechamento.

Segue o código que eu tenho em mãos:

Private Sub Workbook_Open()
Dim exdate As Date
'data de expiração
exdate = "10/03/2014"
If Date > exdate Then
varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")
If varNum = 123456 Then
Exit Sub
End If
MsgBox ("Você chegou no final do período de uso")
ActiveWorkbook.Close
End If
MsgBox ("Você têm " & exdate - Date & " Dias restantes")
End Sub

Fonte: http://excelevba.com.br/expiracao-de-data-para-excel/

 
Postado : 06/03/2014 6:30 am
(@gtsalikis)
Posts: 2373
Noble Member
 

tente:

Private Sub Workbook_Open()
Dim tempo
tempo = Now + TimeValue("00:05:00")
Application.OnTime tempo, Timer
End Sub

Sub Timer()
varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")
If varNum = 123456 Then
Exit Sub
End If
MsgBox ("Você chegou no final do período de uso")
ActiveWorkbook.Close
End If
MsgBox ("Você têm " & exdate - Date & " Dias restantes")
End Sub
 
Postado : 06/03/2014 6:56 am
(@scainet)
Posts: 33
Trusted Member
Topic starter
 

gtsalikis, eu testei o código que você editou, mas ocorreu um erro.
Ao depurar ele aponta para a palavra "Timer".
Estou anexando a planilha para que possa ver.

tente:

 
Postado : 06/03/2014 8:26 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Desculpe, eu esqueci das aspas.

VEja agora:

Private Sub Workbook_Open()
Dim tempo
tempo = Now + TimeValue("00:05:00")
Application.OnTime tempo, "Timer"
End Sub

Sub Timer()
varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")
If varNum = 123456 Then Exit Sub
MsgBox ("Você chegou no final do período de uso")
ActiveWorkbook.Close
End Sub
 
Postado : 06/03/2014 8:30 am
(@scainet)
Posts: 33
Trusted Member
Topic starter
 

Então, agora, com esse último código, não está acontecendo nada.
Eu inseri o código em uma macro e mesmo assim não funcionou.
Segue a planilha com a duas macros testes, onde no TESTE 1 é o código com data que funciona.
E no TESTE 2 é o código com timer que não está funcionando.

No entanto eu vi que ao inserir o código que você passou, criou-se duas macros novas que, se executadas, fazem a planilha expirar.

Desculpe, eu esqueci das aspas.

VEja agora:

Private Sub Workbook_Open()
Dim tempo
tempo = Now + TimeValue("00:05:00")
Application.OnTime tempo, "Timer"
End Sub

Sub Timer()
varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")
If varNum = 123456 Then Exit Sub
MsgBox ("Você chegou no final do período de uso")
ActiveWorkbook.Close
End Sub
 
Postado : 06/03/2014 9:03 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Antes de qqr coisa, os arquivos devem ser compactados.

Se vc rodar o TESTE2, funciona como vc pediu, a planilha expira depois de 5 minutos.

Porém, o código que vc enviou já vem com a "senha" para continuar usando a planilha (ou seja, se vc apenas de "Enter"), desabilita a planilha.

Para tirar a senha, mude essa parte:

varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")

para

varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo")

E, se vc quiser que, ao inserir a senha, o usuário tenha mais 5 minutos adicionais, use:

Global tempo

Sub Teste2()
tempo = Now + TimeValue("00:05:00")
Application.OnTime tempo, "Timer"
End Sub

Sub Timer()
varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")
If varNum = 123456 Then
    tempo = Now + TimeValue("00:05:00")
    Application.OnTime tempo, "Timer"
    Exit Sub
End If
MsgBox ("Você chegou no final do período de uso")
ActiveWorkbook.Close
End Sub
 
Postado : 06/03/2014 9:49 am
(@scainet)
Posts: 33
Trusted Member
Topic starter
 

Cara, ficou perfeito. Funcionou certinho. Obrigado hem.
Eu só não consegui adicionar o código no "Private Sub Workbook_Open()". Mas dai coloquei um "Call Macro" e deu certo.

Agora, não querendo abusar da sua boa vontade, mas eu tive outra ideia para acrescentar nela. Só não sei como fazer.
A pessoa entra na planiha e após 5 min aparece a caixa dizendo que a sessão expirou e solicitando a senha.
Nesse momento, eu queria que, se a pessoa não digitar a senha dentro de 30 segundos (exemplo), a caixa irá se fechar, salvando as alterações e fechando a planilha.

Eu sei que é possível. Só não tenho conhecimento suficiente para escrever o código rs.

Desde já obrigado e desculpa por anexar os arquivos sem compactar.
Segue o arquivo na versão final.

Antes de qqr coisa, os arquivos devem ser compactados.

Se vc rodar o TESTE2, funciona como vc pediu, a planilha expira depois de 5 minutos.

Porém, o código que vc enviou já vem com a "senha" para continuar usando a planilha (ou seja, se vc apenas de "Enter"), desabilita a planilha.

Para tirar a senha, mude essa parte:

varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")

para

varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo")

E, se vc quiser que, ao inserir a senha, o usuário tenha mais 5 minutos adicionais, use:

Global tempo

Sub Teste2()
tempo = Now + TimeValue("00:05:00")
Application.OnTime tempo, "Timer"
End Sub

Sub Timer()
varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo", "123456")
If varNum = 123456 Then
    tempo = Now + TimeValue("00:05:00")
    Application.OnTime tempo, "Timer"
    Exit Sub
End If
MsgBox ("Você chegou no final do período de uso")
ActiveWorkbook.Close
End Sub
 
Postado : 06/03/2014 10:38 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Depois vou ver pra vc, agora estou com umas paradas aqui no tampo.

Lembra de clicar na mãozinha ali pra agradecer.

 
Postado : 06/03/2014 10:43 am
(@scainet)
Posts: 33
Trusted Member
Topic starter
 

Tranquilo Gilmar, faça quando puder.
Enquanto isso eu vou ir pesquisando aqui para tentar ajeitar por conta.

Depois vou ver pra vc, agora estou com umas paradas aqui no tampo.

Lembra de clicar na mãozinha ali pra agradecer.

 
Postado : 06/03/2014 10:54 am
(@scainet)
Posts: 33
Trusted Member
Topic starter
 

A planilha está quase pronta, graças a ajuda do Gilmar. Porém falta um detalhe.
Se alguém ai puder me ajudar.

Preciso que após ser executada a Sub Timer, se a pessoa não digitar a senha e confirmar dentro de 30 segundos (exemplo), a planilha será salva e fechada.
Segue os códigos atuais:

Ao abrir a planilha um cronometro é disparado e, ao término do tempo, uma macro é executada.

Private Sub Workbook_Open()
    Application.OnTime Now + TimeValue("00:05:00"), "Timer"
End Sub

Esta macro exibe um caixa solicitando a senha. Se a senha for verdadeira, o cronometro é disparado novamente.
Se a senha for falsa, aparece uma MsgBox que, se dado OK, a planilha é salva e fechada.

Sub Timer()
    varNum = Application.InputBox("A planilha expirou, informe o codigo", "Revalidação do prazo")
    
If varNum = 123 Then
    tempo = Now + TimeValue("00:05:00")
    Application.OnTime tempo, "Timer"
Exit Sub

End If
    MsgBox ("Você chegou no final do período de uso")
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    End Sub
 
Postado : 08/03/2014 5:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Esse exemplo pode te ajuda.
http://www.teachexcel.com/free-excel-ma ... limit.html

Att

 
Postado : 08/03/2014 6:52 am
(@gtsalikis)
Posts: 2373
Noble Member
 

scainet,

troquei o inputbox por um userform.

Dá uma olhada. (Precisa melhorar a aparência e documentar os códigos, mas creio que vc consegue fazer isso.)

Abs

 
Postado : 09/03/2014 5:09 pm
(@scainet)
Posts: 33
Trusted Member
Topic starter
 

Opa, era isso mesmo que eu queria.
Pode deixar que o restante eu ajeito aqui.

Obrigado novamente Gilmar

scainet,

troquei o inputbox por um userform.

Dá uma olhada. (Precisa melhorar a aparência e documentar os códigos, mas creio que vc consegue fazer isso.)

Abs

 
Postado : 10/03/2014 11:42 am