Ir ao conteúdo
  • Cadastre-se
Patricia Senatore Ribeiro

Excel Macro é executada em todos os arquivos abertos

Recommended Posts

Boa tarde, estou com um problema, criei no excel uma macro para que quando apertar o ENTER ela executa um botão com um filtro de pesquisa. O problema é que em qualquer arquivo aberto, quando aperto o ENTER ele executa o comando e claro dá erro porque o filtro é de outro arquivo. Alguém me ajuda por favor. Preciso que o enter só acione o botão quando eu estiver mexendo naquele arquivo.

 

O código que eu estou usando é:

Private Sub Workbook_Open()

Application.OnKey "~", "Botão1_Clique"
Application.OnKey "{ENTER}", "Botão1_Clique"

End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Patricia Senatore Ribeiro coloque uma condição para executar a ação de filtro de pesquisa, somente se a EstaPasta_de_trabalho em questão estiver ativa.

 

Exemplo

 

Sub Botão1_Clique()
    
    If ActiveWorkbook.Name = "NOME DA SUA PASTA_DE_TRABALHO" Then
    '     CHAMA SUA MACRO OU FILTRA.. PESQUISA ... 
    Else
        Exit Sub
    End If
    
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
20 minutos atrás, Basole disse:

@Patricia Senatore RibeiroAté deu certo mas ai nos outros arquivos o ENTER não pula mais linha, ele não faz mais nada.

 


Sub Botão1_Clique()
    
    If ActiveWorkbook.Name = "NOME DA SUA PASTA_DE_TRABALHO" Then
    '     CHAMA SUA MACRO OU FILTRA.. PESQUISA ... 
    Else
        Exit Sub
    End If
    
End Sub

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom precisava analisar o seu arquivo.

 

Mas de qualquer forma, experimente fazer estas alterações, coloque o comando nos eventos Activate e deactivate, do workbook.

 

Exemplo.

 

Private Sub Workbook_Activate()
   Application.OnKey "~", "Botão1_Clique"
   Application.OnKey "{ENTER}", "Botão1_Clique"
End sub

Private Sub Workbook_DeActivate()
    Application.OnKey "~"
    Application.OnKey "{ENTER}"
End Sub

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce se refere planilha como aba CONSULTA, ou EstaPasta_de_trabalho chamada CONSULTA?   

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce pode referenciar o nome da sua planilha (aba) através do codenome, exemplo Planilha1 ou Plan1 caso o seu office seja em português.

 

codename-vs-name-in-vbe.jpg

 

 

 

Fazendo assim, caso amanhã ou depois você ou algum alterar o nome da aba, não vai ocorrer erros, pois sempre vai comparar o codenome.

 

 

Exemplo

Sub Botão1_Clique()
    
    If ThisWorkbook.ActiveSheet.CodeName = ThisWorkbook.VBProject.VBComponents("Planilha2").Properties("Name") Then
        MsgBox "    CHAMA SUA MACRO OU FILTRA.. PESQUISA ..."
    Else
        Exit Sub
    End If
    
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou, continua dando erro quando aperto ENTER em outra planilha deste arquivo. O meu código está assim, em Esta Pasta de trabalho (para funcionar sempre que eu abrir o arquivo) tem:

 

Private Sub Workbook_Activate()
    Application.OnKey "~", "FILTRO_PESQUISA"
    Application.OnKey "{ENTER}", "FILTRO_PESQUISA"
End Sub


Private Sub Workbook_Deactivate()
    Application.OnKey "~"
    Application.OnKey "{ENTER}"
End Sub
 

Que executa um Botão com uma Macro FILTRO_PESQUISA que como o nome diz executa um Filtro de Pesquisa.

A tabela com os dados fica na Planilha1, que fica oculta, e o botão na aba CONSULTA. Mas quando vou na Planilha1 para modificar algum dado e clico no ENTER ele executa a macro e dá erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sub FILTRO_PESQUISA()
'
' FILTRO_PESQUISA Macro
'
' Atalho do teclado: Ctrl+Shift+F
ActiveSheet.Unprotect "123"

    Sheets("Planilha1").Columns("A:B").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("CONSULTA!Criteria"), CopyToRange:=Range( _
        "CONSULTA!Extract"), Unique:=False

Range("C16").ClearContents
ActiveSheet.Protect "123"

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então voce eliminou o "Botão1_Clique" e tá chamando a macro FILTRO_PESQUISA Diretamente ? 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso, eu gravei uma macro com o filtro de pesquisa e salvei no botão.

adicionado 0 minutos depois

Sub FILTRO_PESQUISA()
'
' FILTRO_PESQUISA Macro
'
' Atalho do teclado: Ctrl+Shift+F
ActiveSheet.Unprotect "123"

    Sheets("Planilha1").Columns("A:B").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("CONSULTA!Criteria"), CopyToRange:=Range( _
        "CONSULTA!Extract"), Unique:=False

Range("C16").ClearContents
ActiveSheet.Protect "123"

End Sub

adicionado 1 minuto depois

Isso eu salvei uma macro com o filtro de pesquisa avançado e coloquei no botão.

 

Sub FILTRO_PESQUISA()
'
' FILTRO_PESQUISA Macro
'
' Atalho do teclado: Ctrl+Shift+F
ActiveSheet.Unprotect "123"

    Sheets("Planilha1").Columns("A:B").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("CONSULTA!Criteria"), CopyToRange:=Range( _
        "CONSULTA!Extract"), Unique:=False

Range("C16").ClearContents
ActiveSheet.Protect "123"

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom vamos lá.. 

 

No modulo de EstaPasta_de_trabalho coloque os codigos:

 

Private Sub Workbook_Open()
    
    Application.OnKey "~", "FILTRO_PESQUISA"
    Application.OnKey "{ENTER}", "FILTRO_PESQUISA"
    
End Sub

Private Sub Workbook_Activate()
    Application.OnKey "~", "FILTRO_PESQUISA"
    Application.OnKey "{ENTER}", "FILTRO_PESQUISA"
End Sub


Private Sub Workbook_Deactivate()
    Application.OnKey "~"
    Application.OnKey "{ENTER}"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "~"
    Application.OnKey "{ENTER}"
End Sub

.... e no modulo padrão, substitua a sua macro por esta alterada, com a condição.

 

Sub FILTRO_PESQUISA()
    '
    ' FILTRO_PESQUISA Macro
    '
    ' Atalho do teclado: Ctrl+Shift+F
    
    If ThisWorkbook.ActiveSheet.CodeName = ThisWorkbook.VBProject.VBComponents("Planilha2").Properties("Name") Then
        
        ActiveSheet.Unprotect "123"
        
        Sheets("Planilha1").Columns("A:B").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("CONSULTA!Criteria"), CopyToRange:=Range( _
        "CONSULTA!Extract"), Unique:=False
        
        Range("C16").ClearContents
        ActiveSheet.Protect "123"
        
    End If
    
End Sub

Desta forma o Enter só vai vai chamar a macro FILTRO_PESQUISA, se a aba Planilha2 ou "consulta" estiver ativa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então mas eu não escrevi thisworkbook.Activate.. 

 

 

image.png.1f08b9a98c7bf3d78d690f8fb778b343.png

 

Se reparar no meu codigo eu referenciei assim:

 

If ThisWorkbook.ActiveSheet.CodeName = ThisWorkbook.VBProject.VBComponents("Planilha2").Properties("Name") Then

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então @Patricia Senatore Ribeiro talvez não tenha entendido a explicação que fiz nos meus post anteriores a respeito da nomenclatura das abas

 

sheet-name-code-name.png

 

No Excel/vba podemos referenciar o nome da aba de duas formas pelo nome (name) ou pelo codenome. No seu caso nome é "CONSULTA" e o codenome é Planilha2. 

Eu usei o codenome para que, se o nome da aba for alterada de CONSULTA para PESQUISA, por exemplo, voce não precisa alterar nada no código pois ele esta verificando o codenome e não o nome. 

 

Entendeu? 

 

Dito isso voce tem que considerar esta linha desta forma: 

 

If ThisWorkbook.ActiveSheet.CodeName = ThisWorkbook.VBProject.VBComponents("Planilha2").Properties("Name") Then

  

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom talvez não tenha rodado em função da diferença de versão do office. 

 

Ajustei sua planilha com o nome da aba.

 

Caso precisar alterar, não esqueça de altera no código vba..

 

 

 

FILTRO ATUALIZADO_1.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora funcionou, muito obrigada mesmo e desculpe o incomodo. Só acrescentei o

 

    Else
        Application.OnKey "~"
        Application.OnKey "{ENTER}"
    End If

 

No final da macro FILTRO_PESQUISA pra não anular o efeito o ENTER nas outras planilhas.

 

Muito Obrigada mesmo!!!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×