Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Dúvida] macro

minha macro não ficou iqual a do video
ela ficou assim.

Sub filtro_avançado()
filtro_avançado Macro
Application.CutCopyMode = False
Application.CutCopyMode = False
Sheets("Produtos").Range("TB_Produtos[#All]").AdvancedFilter Action:= _
xlFilterCopy, CriteriaRange:=Range("Planilha1!Criteria"), CopyToRange:= _
Range("Planilha1!Extract"), Unique:=False
End Sub

1 resposta
solução!

Olá, Fernando. Como vai?

Não se preocupe, o código gerado pelo gravador de macros do Excel pode variar um pouco dependendo dos cliques exatos que damos na tela, mas a estrutura principal do seu código está no caminho certo.

O gravador gerou algumas linhas redundantes e um pequeno erro de sintaxe que fará com que a macro apresente um erro de compilação se você tentar executá-la agora. Vamos entender o que aconteceu e como corrigir o seu código para que ele funcione perfeitamente.

O erro de sintaxe

Logo abaixo da linha Sub filtro_avançado(), o Excel inseriu a frase filtro_avançado Macro. O gravador faz isso para colocar um comentário indicando o nome da macro, mas ele esqueceu de adicionar a apóstrofe (') no início da linha. Sem a apóstrofe, o Excel tenta ler isso como um comando e não entende.

Limpando as repetições

As linhas Application.CutCopyMode = False aparecem duplicadas. Elas servem apenas para limpar a área de transferência (aquela bordinha pontilhada de "copiar"), e apenas uma linha delas é necessária.

O Código Corrigido e Otimizado

Para que a sua macro funcione exatamente como a do vídeo e sem erros, abra o seu editor do VBA (pressione Alt + F11), apague o bloco atual e substitua por este código limpo abaixo:

Sub filtro_avançado()
    ' Filtro avançado automatizado
    
    Application.CutCopyMode = False
    
    Sheets("Produtos").Range("TB_Produtos[#All]").AdvancedFilter Action:= _
        xlFilterCopy, CriteriaRange:=Range("Planilha1!Criteria"), CopyToRange:= _
        Range("Planilha1!Extract"), Unique:=False
        
End Sub

O que cada parte do comando principal faz:

  • Sheets("Produtos").Range("TB_Produtos[#All]"): É a sua base de dados original (a tabela de produtos incluindo os cabeçalhos).
  • Action:=xlFilterCopy: Diz ao Excel que você quer copiar o resultado do filtro para outro lugar, em vez de filtrar a tabela no mesmo local.
  • CriteriaRange:=Range("Planilha1!Criteria"): É o intervalo onde estão os seus critérios de busca (os filtros que você digita).
  • CopyToRange:=Range("Planilha1!Extract"): É o local de destino onde o Excel vai descarregar os dados filtrados.

Dica extra: Depois de colar o código corrigido, volte para a planilha do Excel e certifique-se de que o botão ou forma que você criou para disparar o filtro esteja associado a essa macro filtro_avançado. Para fazer isso, clique com o botão direito no botão, vá em Atribuir macro, selecione o nome dela e clique em OK.

Espero que possa ter lhe ajudado!