Notifications
Clear all

macros simplesmente nao funcionam

6 Posts
3 Usuários
0 Reactions
1,554 Visualizações
(@nilson1978)
Posts: 0
New Member
Topic starter
 

Boa Tarde
adaptando algumas macros e mudando a referencia simplesmente param de funcionar e a outra nao funciona
se alguem puder me ajudar

 
Postado : 25/03/2018 3:27 pm
(@klarc28)
Posts: 0
New Member
 

O código funciona quando é selecionada a célula C2.
Você pode alterar esse endereço, mas só vai funcionar quando for selecionada a célula do endereço.
Simplesmente alterando o valor de uma célula que já está selecionada, eu não consigo fazer.
Está pegando o código que está na célula D3 (.Range("D3").Value). Você também pode alterar esse endereço.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cod As Range
  'Me.Protect "125812", UserInterFaceOnly:=True
  If Target.Address = "$C$2" Then
   With Sheets("lancamento")
   Set cod = Sheets("config").[A:A].Find(.Range("D3").Value, lookat:=xlWhole)
    If cod Is Nothing Then MsgBox "Código não encontrado": Exit Sub
    
      .[c4] = cod.Offset(, 1).Value: .[c5] = cod.Offset(, 2).Value: .[c6] = cod.Offset(, 3).Value
      .[c7] = cod.Offset(, 4).Value: .[c8] = cod.Offset(, 5).Value:
     End With
  
   
 'Range("b8:d8").ClearContents
End If
End Sub
 
Postado : 25/03/2018 5:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não vi problemas ao rodar a rotina do Evento Change, se alterar de "$C$3" para "$D$3", funcionou, eu só acrescentaria a instrução para congelarmos a rotina, porque desta forma ela é executada com as alterações referentes aos resultados.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cod As Range
    Me.Protect "125812", UserInterFaceOnly:=True
  
      If Target.Address = "$C$3" Then
       'Congelamos para evitar loop referente as alterações
       'efetuadas pelos resultados
       Application.EnableEvents = False
       
       Set cod = Sheets("config").[A:A].Find(Target.Value, lookat:=xlWhole)
        If cod Is Nothing Then MsgBox "Código não encontrado": Exit Sub
         '
         With Me
          .[c4] = cod.Offset(, 1).Value: .[c5] = cod.Offset(, 2).Value: .[c6] = cod.Offset(, 3).Value
          .[c7] = cod.Offset(, 4).Value: .[c8] = cod.Offset(, 5).Value:
         
         End With
      
      'Retomamos o controle da macro
      Application.EnableEvents = True
     
     'Range("b8:d8").ClearContents
    End If
    
End Sub

[]s

 
Postado : 26/03/2018 8:14 am
(@nilson1978)
Posts: 0
New Member
Topic starter
 

Boa Noite
Testei e Funcionou, quando fui alterar para ('Range("b8:d8").ClearContents) para limpar as celulas
deu erro e nao funcionou mais.
Nao consigo entender porque nao funciona

 
Postado : 26/03/2018 6:27 pm
(@nilson1978)
Posts: 0
New Member
Topic starter
 

acabei de mandar novamente o modelo
funcionou,porem quando fui alteras para a limpeza das celulas que gostaria que fossem limpas, simplesmente travou e nao voltou a funcionar

 
Postado : 26/03/2018 6:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Nilson, não compreendi, pra mim funciona corretamente, acredito que seu modelo está incompleto uma vez que nele não temos nada no range que pretende limpar (Range("b8:d8").ClearContents), mas se realmente quer limpa-lo, a instrução só irá funcionar se tiver alteração somente na celula "J6" que é a condição imposta e a mesma está dentro do "IF" sem "ELSE", mas você tem de passar em que momento quer limpar para podermos ajustar.

A instrução "Application.EnableEvents = False" em termos mais simples, seria como se desativássemos as macros, ela impede de entrarmos em loop dependendo das instruções, e se não devolvermos para "TRUE" nenhuma outra rotina irá funcionar, se em algum momento executou sem devolver a condição tem de executar em separado com "TRUE"

Outra obs é sobre o range digitado, se não tratarmos corretamente é distinguido maiuscula de minuscula, então "$j$6" é diferente de "$J$6", provavelmente a rotina está sendo executada mas indo direto pro final sem fazer nada.

[]s

 
Postado : 27/03/2018 8:36 am