Notifications
Clear all

Limitar número de aplicações da macro por vez

7 Posts
2 Usuários
0 Reactions
1,503 Visualizações
(@gmribeiro)
Posts: 37
Eminent Member
Topic starter
 

Preciso de ajuda no seguinte: Gostaria de desabilitar uma macro depois de usada uma vez na planilha, ou proteger de alguma forma para que o botão não seja apertado mais de uma vez cada vez que a planilha for aberta. Para entender melhor, a macro gravada atualiza os valores de uma tabela aplicando um reajuste, portanto, a macro pode ser aplicada quantas vezes quiser em cima do novo valor calculado e a pessoa não perceber. Sendo assim, gostaria de uma forma de impedir erros de desatenção, inclusive, se tem como plotar um histórico cada vez que a macro for utilizada com a data da atualização e o reajuste aplicado.

Obrigada.

 
Postado : 28/01/2015 6:07 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Se vc quer um histórico, eu sugiro que vc crie uma planilha somente para ele, e que fique invisível com o atributo xlsheetveryhidden

Nela, vc pode incluir, por exemplo:

Coluna A - data da atualização
Coluna B - reajuste aplicado

Então, a tua macro, antes de rodar, vai buscar nessa planilha, se a data de hoje já foi aplicada, se foi, não roda.

Falei isso presumindo que, se vc tem um código, vc sabe executar. Se precisar de ajuda, poste o modelo da planilha compactado.

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 28/01/2015 6:21 am
(@gmribeiro)
Posts: 37
Eminent Member
Topic starter
 

Prezado,

Obrigada pelas informações. É exatamente isso que eu preciso, mas como não tenho conhecimentos suficientes, sua ajuda será bem vinda. Anexei a planilha simplificada com os custos de fornecedores.

Pelo o que eu pesquisei na internet, para aplicar o reajuste sempre em cima do valor atualizado, eu teria que criar duas colunas, uma com o resultado da aplicação do reajuste (coluna preço) e uma com o preço antigo (coluna auxiliar), sobre a qual o reajuste seria aplicado. A função da macro seria atualizar a coluna auxiliar com o preço mais atualizado sempre que se aplicar o reajuste e zerar o campo do reajuste para a próxima aplicação, além das funções que você falou de gerar e buscar no histórico.

Eu havia criado essa macro mais simples para uma aba com a ferramenta "Gravar Macro", sem utilizar códigos, já que eu não sei. Na planilha anexada não tem a macro, apenas o código que eu copiei da internet para sempre abrir na aba Menu. Se puder me explicar como aplicar isso que você falou para cada aba nova que eu fizer, pois tem muitas outras, será de grande auxílio.

Muito obrigada.

 
Postado : 29/01/2015 5:03 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Mas onde está o botão e o código?

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 29/01/2015 5:15 am
(@gmribeiro)
Posts: 37
Eminent Member
Topic starter
 

Eu tinha mandando a planilha sem a macro, como eu disse. Mas eu refiz agora a macro para te mandar e não está mais dando erro, porque eu zerei na macro o campo reajuste! Então não atualiza mais infinitamente, apenas se inserir um novo valor no campo.

Mesmo assim, gostaria de adicionar um histórico de atualizações.

Em anexo a planilha com a macro.

 
Postado : 29/01/2015 6:13 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Fiz um código de modelo para vc.

Está na planilha 1

Esse código só permite uma atualização por dia. Então, se vc mandar atualizar dia 29/01, ela atualiza e vai para o histórico. Somente se vc mandar atualizar colocando uma data posterior a 29/01 é que ela deixará atualizar novamente.

É este aqui:

Option Explicit

Sub Aplicar_1() 'Colocar o nome visualizado no botão e o nome da planilha

Const quantidade As Long = 3 'coloque aqui a quantidade de tabelas)

Dim atualizacao                 As Range
Dim reajuste                    As Range
Dim historico                   As Range
Dim preco(1 To quantidade)      As Range
Dim auxiliar(1 To quantidade)   As Range
Dim i                           As Long
Dim UL                          As Long

Set atualizacao = Range("N3") 'coloque aqui a célula com a data da última atualização
Set reajuste = Range("N4") 'coloque aqui a célula com a o valor do reajuste
Set historico = Range("P2") 'coloque aqui a que contém o início do histórico

Set preco(1) = Range("B4:B46") 'coloque aqui os preços, aumentando a numeração
Set preco(2) = Range("F4:F42") 'coloque aqui os preços, aumentando a numeração
Set preco(3) = Range("J4:J42") 'coloque aqui os preços, aumentando a numeração

Set auxiliar(1) = Range("C4") 'coloque aqui os auxiliares, aumentando a numeração
Set auxiliar(2) = Range("G4") 'coloque aqui os auxiliares, aumentando a numeração
Set auxiliar(3) = Range("K4") 'coloque aqui os auxiliares, aumentando a numeração

Application.ScreenUpdating = False

If historico.End(xlDown).Row = historico.Row + 1 Then
    Set historico = historico.End(xlDown).Offset(1, 0)
Else
    Set historico = historico.End(xlDown)
End If

If atualizacao.Value2 <= historico.Value2 Then
    MsgBox "Os valores já foram atualizados."
    Exit Sub
End If

For i = 1 To quantidade
    preco(i).Copy
    auxiliar(i).PasteSpecial _
        Paste:=xlPasteValues, _
        Operation:=xlNone, _
        SkipBlanks:=False, _
        Transpose:=False
Next i
    
If Not IsEmpty(historico) Then Set historico = historico.Offset(1, 0)

historico.Value2 = atualizacao.Value2
atualizacao.ClearContents
historico.Offset(, 1).Value2 = reajuste.Value2
reajuste.ClearContents
    
Application.ScreenUpdating = True

End Sub

Para cada planilha, vc vai precisar ajustar os campos onde deixei comentado.

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 29/01/2015 10:02 am
(@gmribeiro)
Posts: 37
Eminent Member
Topic starter
 

Obrigada Gilmar.

 
Postado : 30/01/2015 4:31 am