Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Patricia Senatore Ribeiro

Excel Macro é executada em todos os arquivos abertos

Recommended Posts

Postado (editado)

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

 

Editado por DiF
Inserir o código com o botão CODE <>

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
Postado (editado)

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

 

Editado por Basole
  • 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
Postado (editado)

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

 

Editado por Basole

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

Como está a sua macro Macro FILTRO_PESQUISA ? 

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
Postado (editado)

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

  

 

Editado por Basole

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






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

×