Inquiridor
Fazer uma Rotina que aciona quando sae da planilha para Outra.

Pergunta
-
Bom Dia.
Fiz Como teste Uma Rotina no modulo3 que roda com um botao na planilha sheet1. Essa Rotina Lista os nomes e parte da Formatação da celula amarela na sheet2.
Gostaria Que rodasse Rotina, nao com o Clicar do botao mas de eventos Como QUANDO abre a planilha sheet2. Tentei Fazer mas nao deu Certo. ANEXO A Rotina, agradeço a quem possa ajudar.
Tadao
- Editado Antonio Tadao kano sexta-feira, 7 de outubro de 2016 14:27
Todas as Respostas
-
Antonio, boa tarde.
Você pode usar o seguinte código:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) if ActiveSheet.Name = "Sheet2" then Call NOME_DA_ROTINA End Sub
Esse método irá rodar sempre que trocar de planilha e vai verificar se você se deslocou para a planilha Sheet2.
Faça os testes aí e nos dê um retorno.
Abraços!
- Marcado como Resposta Antonio Tadao kano sexta-feira, 7 de outubro de 2016 14:27
- Não Marcado como Resposta Antonio Tadao kano sexta-feira, 7 de outubro de 2016 14:28
-
Ola Gustavo, primeiro peco muitas desculpas pela demora da resposta devido a motivos adversos.
Agradeco pelo retorno da questao postada, vi que o link que coloquei estava errado e ja retirei pois nao tinha sentido.
Pelo que entendi o que voce sugeriu e colocar o codigo na area de codificacao do ThisWorkbook, certo?. O que eu escrevi esta na area de codificacao do Sheet para poder usar o evento Deactivate e a subrotina na area de codificacao do Modulo1.
Nas na area de codificacao do Sheet nao tem o Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range), ela so tem no ThisWorkbook por isso entendi que voce sugeriu colocar o codigo na area de codificacao do ThisWorkbook.
Coloquei o codigo no ThisWorkbook conforme mostra na Fig1, mas nao funcionou.
Fig 1
Deixando o codigo como esta no ThisWorkbook e acrescentei o codigo simples de Range("A1")=1 na area de codificacao da Sheet1 para o evento Private Sub Worksheet_Deactivate() conforme mostra a Fig 2 , dai deu a mensagem do MsgBox "Essa Planilha e Sheet2", onde eu devo ter errado?
Tadao
Fig 2
- Editado Antonio Tadao kano sexta-feira, 7 de outubro de 2016 15:10
-
Antonio, bom dia.
Desculpe a enorme demora em respondê-lo. Acabei deixando de acessar o forum por alguns motivos.
Gostaria de saber se ainda precisa de ajuda.
"Deixando o codigo como esta no ThisWorkbook e acrescentei o codigo simples de Range("A1")=1 na area de codificacao da Sheet1 para o evento Private Sub Worksheet_Deactivate() conforme mostra a Fig 2 , dai deu a mensagem do MsgBox "Essa Planilha e Sheet2", onde eu devo ter errado?"
Essa mensagem aparece quando você muda para a planilha Sheet2, correto? Se for isso, ela realmente tem que aparecer, devido ao evento dentro de ThisWorkbook.
-
Ola Gustavo, obrigado pelo retorno.
Ja nao lembrava qual era o problema que na epoca realmente eu tinha e como contornei.
Acho que eu estava querendo acionar uma rotina que quando mudasse para outra planilha, e nao estava dando certo.
O codigo que voce sugeriu de Worksheet_Change como abaixo, notei que ela atua quando muda dados das celulas e nao quando muda de Planilha.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If ActiveSheet.Name = "Sheet2" Then MsgBox "Essa Planilha e Sheet2" Else MsgBox "Essa Planilha nao e Sheet2""" End If End Sub
Notei que na area de codificacao do ThisWorkbook, tem um evento Workbook_SheetDeactivate como abaixo, dai funcionou beleza, obrigado.
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) If ActiveSheet.Name = "Sheet2" Then MsgBox "Essa Planilha e Sheet2" Else MsgBox "Essa Planilha nao e Sheet2""" End If End Sub
Mas ficou uma duvida a respeito, caso voce pudesse ajudar ficaria grato, que e o seguinte. No codigo acima, quando mudo de Planilha1 para 2, evidentemente a Planilha ativa e a 2, entao coloquei um codigo limpando a Planilha e depis Range("A1")=1 apos o MsgBox como abaixo, e noto que a Range A1 da Sheet2 esta com valor1
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) If ActiveSheet.Name = "Sheet2" Then MsgBox "Essa Planilha e Sheet2" ActiveSheet.Cells.ClearContents Range("A1") = 1 Else MsgBox "Essa Planilha nao e Sheet2""" End If End Sub
Mas se colocar o mesmo codigo na Area de codificacao do Sheet1 como abaixo usando o evento WorkSheet_Deactivate, quando muda de Planilha 1 para 2, da a mensagem do MsgBox como sendo a Planilha Sheet2 indicando que o ponteiro esta na Sheet2, mas quando coloca o dado da Range A1, o ponteiro esta na Sheet1, Voce saberia o porque?
Private Sub Worksheet_Deactivate() 'Area de codificacao do sheet1 If ActiveSheet.Name = "Sheet2" Then MsgBox "Essa Planilha e " & ActiveSheet.Name ActiveSheet.Cells.ClearContents Range("A1") = 1 Else MsgBox "Essa Planilha nao e Sheet2""" End If End Sub
Lembro que a um tempo atras estava tendo problemas com esse evento e o Renan que da suporte nesse Forum me alertou que quando e acionado o WorkSheet_Deactivate de uma determina Sheet, voce ja nao esta nessa Sheet como mostrado ate o MsgBox...., mas quando chega no codigo Range("A1")=1 esta na Sheet anterior, coisa que nao acontece no WorkBook_SheetDeactivate, nao sei o porque.....
Tadao