Notifications
Clear all

Ativando a macro por determinado intervalo da planilha.

21 Posts
4 Usuários
0 Reactions
3,682 Visualizações
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Olá estimados colegas deste fórum.

Primeramente venho agradecer de coração a ajuda de todos colegas deste fórum.
Graças a generosidade de todos já estou conseguindo criar minhas próprias macros facilitando o meu trabalho diário.

Criei esta macro porém estou com um problema e necessito da ajuda dos mestres do vba deste fórum.

Toda vez que eu digitar os números de 1 a 4 no intervalo "A1:B3"ela chama outra rotina conforme o número digitado.

Até ai não há problema funciona direitinho.
O problema é que não sei por qual motivo se clicar ou inserir algo em qualquer célula é chamado a rotina que imprime o documento depois salva e fecha a planilha.

Necessito que só quando inserir no intervalo "A1:B3" seja chamado as rotinas.

Será que não estou usando o Worksheet_Change corretamente??
Desde já agradeço e espero que alguém possa me ajudar.

Abraços

Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
ThisWorkbook.Save
Target.Select
        If Not Intersect(Target, Range("A1:B3")) Is Nothing Then
Select Case Target.Value
Case 1
                Call macro1
                Call macro2
Case 2
Call macro 2

Case 3 
Call macro 3

Case 4

Call macro 2
Call macro 3

End Select 
End If

    
        Application.EnableEvents = True
Call Imprimir doc
Sheets ("Relatorio").Select
MsgBox "Operacao completa"

ThisWorkbook.Save
ThisWorkbook.Close

End Sub
 
Postado : 30/01/2014 5:20 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Fabiosp,

Bom Dia!

Não da para testar seu código somente com esse pedaço do mesmo. Entretanto, até onde consegui entender, seu código faz o seguinte: quando você digita qualquer coisa no intervalo A1:B3, você captura o valor da célula atual (Target.Value) e verifica que valor esse para, em seguida, chamar uma das rotinas que deseja. As rotinas de impressão, salvamento e fechamento da planilha estão logo após o End If.

O que eu acho que está ocorrendo: Quando já existe algum valor digitado naquele intervalo e você digita um novo valor, a execução pula logo para a primeira linha depois do End If e executa as rotinas de impressão, salvamento e fechamento da planilha pois, no caso, a linha If Not Intersect(Target, Range("A1:B3")) Is Nothing Then passa a ser FALSA e, portanto, a execução salta todo o conteúdo que está entre o IF e o End IF.

Se for isso, você precisa alterar a lógica da sua programação.

 
Postado : 30/01/2014 5:37 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Bom dia Wagner Morel.
É isso mesmo.
Quando é inserido qualquer coisa neste intervalo e ativado as rotinas conforme o valor.
Tentei deixar este intervalo em branco para ver se dava certo e mudar a ordem do salvar, imprimir e fechar mas continua acontecendo a mesma coisa.

Abraços.

 
Postado : 30/01/2014 5:47 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Fabiosp, eu sempre tive problemas ao combinar Worksheet_Change com Intersect, por isso, minha sugestão é que vc troque a linha:

If Not Intersect(Target, Range("A1:B3")) Is Nothing Then

Por esta:

If Target.Row <= 3 and Target.Colum <= 2 Then

Não testado (mas vc deve ter entendido a ideia)

Abs

 
Postado : 30/01/2014 5:48 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Além da sugestão do colega Gilmar (que você deve testar), você deve executar o seu código com F8 (passo a passo). Coloque um Break Point no início do código, digite algo no intervalo e vá executando passo a passo com F8 para ter uma ideia do que é que está acontecendo.

Se não conseguir, compacte o arquivo com ZIP e anexe o mesmo aqui.

 
Postado : 30/01/2014 5:56 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Caro colega gtsalikis bom dia

Muito obrigado pela sugestão mas não entendi muito bem que você esta sugerindo.

Abraços

 
Postado : 30/01/2014 5:56 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Caros gtsalikis e Wagner Morel

Muito obrigado pela dicas.
Irei testar suas dicas e caso persirtir o erro vou postar minha planilha para análise.
Novamente agradeço a ajuda e generosidade de todos.
Abraços.

 
Postado : 30/01/2014 6:04 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Era pra trocar uma linha pela outra, mas eu acabei de ver q cometi um erro de digitação. Segue o código já alterado (e corrigido o meu erro):

Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
ThisWorkbook.Save
Target.Select
        If Target.Row <= 3 and Target.Column <= 2 Then
Select Case Target.Value
Case 1
                Call macro1
                Call macro2
Case 2
Call macro 2

Case 3 
Call macro 3

Case 4

Call macro 2
Call macro 3

End Select 
End If

    
        Application.EnableEvents = True
Call Imprimir doc
Sheets ("Relatorio").Select
MsgBox "Operacao completa"

ThisWorkbook.Save
ThisWorkbook.Close

End Sub
 
Postado : 30/01/2014 6:08 am
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Prezados colegas,

Fiz tudo que foi sugerido, porém continua acontecendo a mesma coisa.
Troquei o intervalo de A1:B3 para L19:M22 também não surtiu efeito.
Executei meu código com F8 conforme colega Wagner Morel sugeriu porém no Worksheet_Change aperto o F8 e não acontece nada.
Inclusive achei muito legal esse lance do F8 não sabia desse recurso.
Mais uma coisa que aprendi graças as dicas que recebo dos mestres deste fórum.

Bom vou mexer mais um pouco para ver se consigo resolver.
Estou anexando meu arquivo para análise,

Desde já agradeço

Abraços.

 
Postado : 30/01/2014 7:54 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Fabiosp,

Boa Tarde!

Veja se é assim.

 
Postado : 30/01/2014 12:35 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Boa Noite Wagner Morel
Muito obrigado por analisar minha planilha.
Testei agora e a tarefa de chamar a macro pelo número está funcionando mas detectei um outro problema.
Antes de chamar a macro pelo número preciso atualizar uma informação na coluna D e percebi que depois que se inseri a informação e se digita o número para chamar a rotina a macro não funciona.
Desculpe se eu não expliquei direito mas o que será que esta acontecendo.

Abraços.

 
Postado : 30/01/2014 5:18 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Olá

Despois de enviar a resposta acima que me lembrei de uma coisa.
Estou colocando a rotina Worksheet_Change na diretório Plan1 se eu colocar no diretório Esta pasta de trabalho teria alguma diferença?
Realmente me esqueci de explicar que antes de chamar a rotina pelo número tenho que atualizar uma informação na coluna D
Desculpe o incomodo e minha distração.

Abraços.

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Address = "$L$19" Then
        ThisWorkbook.Save
        Target.Select
        If Target.Row <= 19 And Target.Column <= 12 Then
            Select Case Target.Value
            Case 1
                                    
                Call Macro1
                Call Macro2
                      
            Case 2
                      
                Call Macro2
                    
            Case 3
                      
                Call Macro3
                    
            Case 4
                    
                Call Macro2
                Call Macro3
                    
            End Select
        End If
                     
        Application.EnableEvents = True
        Call Imprimir_doc
                  
        Sheets("Relatorio").Select
                  
        MsgBox "Operacao completa"
                
        ThisWorkbook.Save
        ' ThisWorkbook.Close
    End If
    
End Sub
 
Postado : 30/01/2014 5:30 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Ok.
Havia um pequeno erro de lógica. Segue nova versão.

 
Postado : 30/01/2014 8:18 pm
(@fabiosp)
Posts: 291
Reputable Member
Topic starter
 

Bom dia Wagner Morel

Muito obrigado pele ajuda testei a macro porém continua acontecendo algo estranho.
Quando digito o número desejado roda normal
só que depois que aparece a mensagem do msgbox este repetindo (Chamando de novo) a primeira macro que processada.
Tentei mudar as ordens mas não surtiu efeito.
Desculpe incomodar mas será que poderia ajudar a resolver este problema?

Desde já agradeço

Abraços

 
Postado : 31/01/2014 4:51 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Fabio, testei o ultimo exemplo que o Wagner anexou e não encontrei nenhum problema, não ocorreu oque esta comentando, todos os Cases funcionaram conforme o valor alterado da celula.

Uma Obs : Para utilizar o recurso Passo a Passo tecla "F8" em Eventos, você tem de fazer o seguinte.
Na Aba que está com o Evento, coloque o cursor em cima da linha:
Private Sub Worksheet_Change(ByVal Target As Range), depois tecle "F9" e verá que a linha ficara na cor MARROM, isto é o que chamamos de "Ponto de Interrupção", ou seja pode ser colocada em qualquer linha, e quando executar a rotina a execução irá para na linha marcada e para continuar tecle "F8".

[]s

 
Postado : 31/01/2014 6:11 am
Página 1 / 2