Ir ao conteúdo
  • Cadastre-se

Excel Vba 30 vezes ( aberta ) ela se auto destrói


Ir à solução Resolvido por Basole,

Posts recomendados

@Netobarbuio Boas,
Veja se isso ajuda.

Vai ter que colocar uma aba no ficheiro com o nome "Controle" e na célula A1 inserir a quantidade de vezes que pode abrir até eliminar o ficheiro.

 

Cria um módulo novo e cola a seguinte macro:

Sub ApagaFicheiro()
  Dim xNomeCompleto As String
  xNomeCompleto = Application.ActiveWorkbook.FullName
  ActiveWorkbook.Saved = True
  Application.ActiveWorkbook.ChangeFileAccess xlReadOnly
  Kill xNomeCompleto 
  Application.ActiveWorkbook.Close False
End Sub

 

Depois no evento do Livro:

'Antes de fechar ele retira 1 do valor de A1
Private Sub Workbook_BeforeClose(Cancel As Boolean)
	Sheets("Controle").Range("A1").Value = Sheets("Controle").Range("A1").Value - 1
End Sub

'Ao abrir verifica se o valor de A1 é 0, caso seja verdade ele chama a macro ApagaFicheiro
Private Sub Workbook_Open()
On Error Resume Next
 Dim vezes As Integer
 Dim sh As Worksheet
vezes = Sheets("Controle").Range("A1").Value
 If vezes = 0 Then
 ApagaFicheiro
End If
End Sub

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@AfonsoMira @Netobarbuiomas no caso do usuário ter uma cópia da planilha, poderá utilizar infinitamente, só terá o trabalho de pegar a cópia novamente a cada 30 vezes de abertura.

 

Acho que a solução para este caso é salvar as aberturas no registro do Windows. 

 

No momento não tenho acesso a um PC para testar um exemplo e postar aqui.

@Netobarbuio se puder aguardar até o final da tarde...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@NetobarbuioConforme prometido, segue exemplo...

 

  Aproveitei a rotina "ApagaFicheiro" do colega @AfonsoMira, que "destrói" a planilha 

 

* Copie e cole o codigo abaixo no modulo: EstaPasta_de_trabalho

 

Private Sub Workbook_Open()
    Dim cnt    As Long
    cnt = VBA.GetSetting("MyProjet", "Settings", "Open", 0)
      cnt = cnt + 1
          VBA.SaveSetting "MyProjet", "Settings", "Open", cnt
    
     If cnt > 30 Then
    
          MsgBox "Esta é uma Versão de Avaliação e se expirou! " & VBA.vbNewLine & _
                 "E será fechada automaticamente.", vbCritical, "A T E N Ç Ã O"
          ApagaFicheiro               
     End If
     
End Sub

Private Sub ApagaFicheiro()
  Dim xNomeCompleto As String
  xNomeCompleto = Application.ActiveWorkbook.FullName
  ActiveWorkbook.Saved = True
  Application.ActiveWorkbook.ChangeFileAccess xlReadOnly
  Kill xNomeCompleto
  Application.ActiveWorkbook.Close False
End Sub

 

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

12 horas atrás, Basole disse:

@NetobarbuioConforme prometido, segue exemplo...

 

  Aproveitei a rotina "ApagaFicheiro" do colega @AfonsoMira, que "destrói" a planilha 

 

* Copie e cole o codigo abaixo no modulo: EstaPasta_de_trabalho

 

Private Sub Workbook_Open()
    Dim cnt    As Long
    cnt = VBA.GetSetting("MyProjet", "Settings", "Open", 0)
      cnt = cnt + 1
          VBA.SaveSetting "MyProjet", "Settings", "Open", cnt
    
     If cnt > 30 Then
    
          MsgBox "Esta é uma Versão de Avaliação e se expirou! " & VBA.vbNewLine & _
                 "E será fechada automaticamente.", vbCritical, "A T E N Ç Ã O"
          ApagaFicheiro               
     End If
     
End Sub

Private Sub ApagaFicheiro()
  Dim xNomeCompleto As String
  xNomeCompleto = Application.ActiveWorkbook.FullName
  ActiveWorkbook.Saved = True
  Application.ActiveWorkbook.ChangeFileAccess xlReadOnly
  Kill xNomeCompleto
  Application.ActiveWorkbook.Close False
End Sub

 

Show, deu certo Obrigado top!! 

Em 08/07/2021 às 08:04, AfonsoMira disse:

@Netobarbuio Boas,
Veja se isso ajuda.

Vai ter que colocar uma aba no ficheiro com o nome "Controle" e na célula A1 inserir a quantidade de vezes que pode abrir até eliminar o ficheiro.

 

Cria um módulo novo e cola a seguinte macro:

Sub ApagaFicheiro()
  Dim xNomeCompleto As String
  xNomeCompleto = Application.ActiveWorkbook.FullName
  ActiveWorkbook.Saved = True
  Application.ActiveWorkbook.ChangeFileAccess xlReadOnly
  Kill xNomeCompleto 
  Application.ActiveWorkbook.Close False
End Sub

 

Depois no evento do Livro:

'Antes de fechar ele retira 1 do valor de A1
Private Sub Workbook_BeforeClose(Cancel As Boolean)
	Sheets("Controle").Range("A1").Value = Sheets("Controle").Range("A1").Value - 1
End Sub

'Ao abrir verifica se o valor de A1 é 0, caso seja verdade ele chama a macro ApagaFicheiro
Private Sub Workbook_Open()
On Error Resume Next
 Dim vezes As Integer
 Dim sh As Worksheet
vezes = Sheets("Controle").Range("A1").Value
 If vezes = 0 Then
 ApagaFicheiro
End If
End Sub

 

Bom dia

Top deu certinho obrigado!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!