Ir ao conteúdo

Posts recomendados

Postado

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

 

Postado

@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

 

Postado

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
Postado

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

 

Postado

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.

Postado

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

Postado

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

Postado

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.

Postado

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

 

Postado

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

  

 

Postado

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!