Notifications
Clear all

Macros Recorrentes

3 Posts
2 Usuários
0 Reactions
1,098 Visualizações
(@lcsimao)
Posts: 20
Eminent Member
Topic starter
 

Boa tarde a todos,

Quero, primeiramente, agradecer a ajuda de todos.

Tenho uma planilha que se atualiza quando há uma alteração em certos campos da mesma. Acontece que há um campo que precisa está zerado quando um outro é preenchido, então a planilha se atualiza também zerando aquele campo, só que este campo, sendo alterado, também atualiza a planilha, e, pelo que parece, ocorre um looping de atualizações até o erro e o fechamento da planilha.

Como faço para a planilha entender que na situação em que há a atualização automática do campo, a planilha não se atualize para que não ocorra o looping e consequentemente o erro?

Segue início do código... vou repetindo as instruções para cada Range....

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim KeyCells2 As Range
    Dim KeyCells3 As Range
    Dim KeyCells4 As Range
    Dim KeyCells5 As Range
    Dim KeyCells6 As Range
    Dim KeyCells7 As Range
    

    Set KeyCells = Range("i8")
    Set KeyCells2 = Range("i9")
    Set KeyCells3 = Range("Aj7")
    Set KeyCells4 = Range("c13")
    Set KeyCells5 = Range("c16")
    Set KeyCells6 = Range("p8")
    Set KeyCells7 = Range("p9")
    
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

            Range("P8") = 0
            
            Application.Goto ActiveWorkbook.Sheets("Calc").Range("c4")
            ActiveSheet.Range("C4:aw5").Copy

            Application.Goto ActiveWorkbook.Sheets("Cálculo Dígito Boleto").Range("C25:aw26")
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
    
      
    End If


    If Not Application.Intersect(KeyCells2, Range(Target.Address)) _
           Is Nothing Then

            Range("P9") = 0
            
            Application.Goto ActiveWorkbook.Sheets("Calc").Range("c4")
            ActiveSheet.Range("C4:aw5").Copy

            Application.Goto ActiveWorkbook.Sheets("Cálculo Dígito Boleto").Range("C25:aw26")
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
       
    End If

     ...

End Sub

Se não ficou claro, me avisem por favor.

Fico grato,

 
Postado : 15/06/2017 1:05 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde,

Experimente usar o EnableEvents, assim:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    
'Seu código------------
    
    Application.EnableEvents = True

End Sub

att,

 
Postado : 15/06/2017 2:24 pm
(@lcsimao)
Posts: 20
Eminent Member
Topic starter
 

Boa tarde Bruno,

Já resolveu!!

Muito obrigado!

 
Postado : 15/06/2017 2:42 pm