none
Fazer uma Rotina que aciona quando sae da planilha para Outra. RRS feed

  • 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




    terça-feira, 13 de setembro de 2016 15:08

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!

    sábado, 24 de setembro de 2016 21:27
  • 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


    sexta-feira, 7 de outubro de 2016 15:09
  • 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.

    domingo, 10 de setembro de 2017 12:50
  • 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

    sexta-feira, 15 de setembro de 2017 15:01