Notifications
Clear all

executar limpeza automática

10 Posts
3 Usuários
0 Reactions
1,418 Visualizações
(@valdecirrk)
Posts: 230
Reputable Member
Topic starter
 

boa tarde

tem um procedimento que a pessoa faz quando abre o arquivo excel, para limpar uma planilha é só clicar em um botão limpar planilha XXX.
mas quero que isso faça sem a necessidade de clicar em um botão.
a outra situação é que essa limpeza deve acontecer sempre no dia 2 por exemplo.
neste caso quero que a limpeza seja feita sem que precise abrir a planilha, tem como isso acontecer?

 
Postado : 28/01/2015 1:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Tem, mas se poder explicitar mais detalhes, esse limpar, é em todas as guias do arquivo? se for em um ou duas ou três etc guia, qual? se for em um intervalo, linha coluna, qual?

Poste seu arquivo modelo compactado!!!

Att

 
Postado : 28/01/2015 1:37 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

tem um procedimento que a pessoa faz quando abre o arquivo excel, para limpar uma planilha é só clicar em um botão limpar planilha XXX.

Ok, que procedimento é esse? Que versão do Excel estamos falando?

mas quero que isso faça sem a necessidade de clicar em um botão.

Se nós soubermos aonde fica esse botão, podemos descobrir como dispará-lo via VBA, via evento Open do arquivo, alguma forma automatizada... Mas não sei aonde é essa opção... Se vc estiver falando da Veriicação de Compatibilidade, sabemos aonde fica, mas eu teria que encontrá-lo e descobrir como dispará-lo via macro.

a outra situação é que essa limpeza deve acontecer sempre no dia 2 por exemplo.

Sim, se formos usar o VBA e descobrirmos aonde é a opção, podemos tentar disparar uma vez por mês, no dia 2, ou qquer dia após o dia 2, caso não tenha ocorrido esse mês ainda.

neste caso quero que a limpeza seja feita sem que precise abrir a planilha, tem como isso acontecer?

Aí vc tá pedindo demais, amigo! Impossível !

FF

 
Postado : 28/01/2015 4:28 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

neste caso quero que a limpeza seja feita sem que precise abrir a planilha, tem como isso acontecer?

Aí vc tá pedindo demais, amigo! Impossível !

FF

hahahaha.

Com VBA, é impossível.

Agora, se no fim das contas, vc quer que todo dia 2 a planilha fique zerada, deixe de lado o Excel e procure um agendador de tarefas (o Windows tinha, não sei se ainda tem).

Com isso, tenha uma cópia zerada da planilha, e agende para copiar e sobreescrever todo dia 2. Pronto. Nem precisa de VBA :)

 
Postado : 28/01/2015 5:10 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

neste caso quero que a limpeza seja feita sem que precise abrir a planilha, tem como isso acontecer?

:? Eu nem notei a ultima solicitação :o

Bom alguém (SO, Outras liguagens ou o MS Oficce), vai ter que executar essa ação...sem explicitar detalhadamente, vai ficar mais do impossível!

Att

 
Postado : 28/01/2015 6:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Algo desse tipo, talvez te ajude.
http://www.epirus.com.br/blog-epirus/it ... nutos.html

Att

 
Postado : 28/01/2015 6:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ainda estou curioso para saber que botão é esse . . . .

Eu tenho um suplemento chamado ASAP Utilities, lá tem botões de limpeza.... Mas não conheço um botão do Excel que faça a limpeza, aliás, que limpeza é essa? Limpar UsedRanges? seria uma macro que alguém escreveu? Algum suplemento? um recurso do Excel que eu nunca vi??
Um pássaro? um avião? rsrs

FF

 
Postado : 28/01/2015 10:05 pm
(@valdecirrk)
Posts: 230
Reputable Member
Topic starter
 

Bom pessoal vou explicar qual é esse botão.

tenho uma macro que faz isso:
Private Sub CommandButton14_Click()
Dim iRet As Integer
Dim strPrompt As String
Dim strTitle As String

' Promt
strPrompt = "Deseja realmente inciar o Resumo Mensal de Atividades?" & " " & "Esta ação deve ser feita apenas no final de cada mês e apagará seu histórico mensal."

' Título da Janela
strTitle = "AVISO"

'Mensagem solicitada
iRet = MsgBox(strPrompt, vbYesNo, strTitle)

' Opção de Botão
If iRet = vbYes Then
Limpar_resumo
End If

End Sub

logo vai até ap lanilha e:

Sub Limpar_resumo()

'Resumo
Sheets("Resumo").Range("E9:G17").Value = ""
Sheets("Resumo").Range("E19").Value = ""
Sheets("Resumo").Range("A24:H61").Value = ""
Sheets("Resumo").Range("E40").Value = ""
Sheets("Resumo").Range("G40").Value = ""
Sheets("Resumo").Range("D3:D5").Value = ""
Sheets("Resumo").Range("F3").Value = ""
Sheets("Resumo").Range("F19").Value = ""
Sheets("Resumo").Range("F20").Value = ""
Sheets("Resumo").Range("G9:G17").Value = ""
Sheets("Resumo").Range("H9:H18").Value = ""
Sheets("Resumo").Range("E18").Value = ""
Sheets("Resumo").Range("E20").Value = ""
End Sub

este comendo esta em um botão que foi inserido para executar a macro. desculpem se não fui tão claro.
isso acontece por que depois de cada inspeção que os técnicos fazem devem zerar a planilha e isso as vezes não acontece e acaba acumulando infomação.

por isso todo dia 2 de cada mês queria que esse comando llimpasse a planilha, sem depender da pessoa.

muitas vezes acabam abrindo o axcel no dia 5 ai fica dificil de dizer quando que deve zerar.

 
Postado : 29/01/2015 5:02 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Agora então ficou mais claro, esse botão de limpeza é uma macro específica.
Então vamos ao que interessa...

- Um nome será criado para guardar a data da última limpeza. Essa data será importante para a verificação da necessidade da nova limpeza, conforme lógica descrita abaixo
- Vou criar uma macro simples que vai rodar toda vez que o arquivo abrir.
- A macro terá a seguinte lógica:
- verifica se o mês da data da última limpeza, é igual ao mês atual. Se for, sai do código e nada acontece.
- na verificação acima, se o mês for diferente, significa que pode ter que acontecer uma limpeza. Então confere-se o dia da data do computador, se esse dia for maior ou igual a 2, significa que esse mês não houve limpeza, então a limpeza será disparada.

É isso né ?

 
Postado : 29/01/2015 8:06 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Eu mexi somente com o VBA.
Troquei o código do botão de lugar, coloquei num módulo chamado Planilhando, assim o código consegue enxergá-lo a partir do código da EstaPastadeTrabalho.

Olha como ficou... vc precisa copiar o código da EstaPastaDeTrabalho
Vc precisa copiar o módulo Planilhando
Vc precisa mudar o código do botão CommandButton14 para o que eu coloquei na folha de código da planilha.

Para efeito ilustrativo, este foi o código que usei na Pasta De Trabalho

Private Sub Workbook_Open()
Dim UltimaLimpeza As Date
    With ThisWorkbook
        If Not NomeExiste("UltimaLimpeza") Then
            .Names.Add Name:="UltimaLimpeza", RefersTo:=VBA.Date() - 30
        End If
        If NomeExiste("UltimaLimpeza") Then
            UltimaLimpeza = Application.Evaluate(.Names("UltimaLimpeza").Value)
            If VBA.Month(UltimaLimpeza) < VBA.Month(VBA.Date()) Then
                If VBA.Day(VBA.Date()) >= 2 Then
                    Call CodigoDoBotao14
                End If
            End If
        End If
    End With
End Sub

Este foi o código que usei no módulo Planilhando (ah, eu dei uma melhorada no código de limpeza, ficou menos e fácil de entender):

Public Sub CodigoDoBotao14()
Dim iRet        As Integer
Dim strPrompt   As String
Dim strTitle    As String

    ' Título da Janela
    strTitle = "AVISO"
    
    ' Promt
    strPrompt = "Deseja realmente inciar o Resumo Mensal de Atividades?" & " " & "Esta ação deve ser feita apenas no final de cada mês e apagará seu histórico mensal."
    
    'Mensagem solicitada
    iRet = MsgBox(strPrompt, vbYesNo, strTitle)
    
    ' Opção de Botão
    If iRet = vbYes Then
        Limpar_resumo
    End If

End Sub

Public Sub Limpar_resumo()
Dim rng As Range
    'Resumo
    With Sheets("Resumo")
        Set rng = Application.Union(.Range("E9:G17"), .Range("E19"), .Range("A24:H61"), .Range("E40"), .Range("G40"), .Range("D3:D5"), _
                                    .Range("F3"), .Range("F19"), .Range("F20"), .Range("G9:G17"), .Range("H9:H18"), .Range("E18"), .Range("E20"))
    End With
    rng.ClearContents
    Set rng = Nothing
End Sub

Public Function NomeExiste(Nome As String) As Boolean
On Error Resume Next
Dim Conteudo As Variant
    Conteudo = ThisWorkbook.Names(Nome).Value
    NomeExiste = (Err.Number = 0)
End Function

Este é o novo código do botão, isolado na folha de código da planilha:

Private Sub CommandButton14_Click()
    Call CodigoDoBotao14

End Sub

O anexo mostra tudo funcionando.

 
Postado : 29/01/2015 8:34 pm