Como atualizar automaticamente um filtro automático do Excel quando os dados são alterados?
Caso de uso: altero o valor de uma célula para um valor que foi filtrado. Eu quero ver a linha atual desaparecendo sem ter que fazer mais nada.
microsoft-excel
sorin
fonte
fonte
Respostas:
A troca do código com isso parece funcionar também (pelo menos no Excel 2010):
fonte
Eu descobri que quando eu trabalhava com tabelas, isso não funcionava. O filtro não estava na folha, mas na mesa. esse código fez o truque
Encontrei as informações aqui: http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
fonte
Clique com o botão direito do mouse no nome da planilha, escolha "Visualizar código" e cole o código abaixo. Após colar, clique no ícone do Excel abaixo de "Arquivo" no canto superior esquerdo ou digite Alt-F11 para retornar à exibição da planilha.
Isso permitirá a atualização automática. Não se esqueça de salvar o arquivo em um formato com mentira de suporte a macro
.xlsm
.fonte
Eu uso um VBA / Macro baseado em
Worksheet_Change
evento também, mas a minha abordagem é um pouco diferente ... Ok, primeiro o código e, em seguida, as explicações:(Use a combinação de teclas Alt+ F11para fazer aparecer o painel de desenvolvimento e cole o código na planilha que contém o filtro que você deseja atualizar automaticamente.)
No meu exemplo, suponho que tenha um filtro simples em uma única coluna (L no meu caso) e que meu intervalo de dados esteja nas linhas de 1 (mesmo que possa conter o cabeçalho) a 126 (escolha um número grande o suficiente para ser certo). A operação é simples: à medida que algo é alterado na minha planilha, o filtro no intervalo especificado é removido / reaplicado novamente para que seja atualizado. O que precisa de um pouco de explicação aqui são Field e Critérios .
o campo é um deslocamento inteiro do intervalo. No meu caso, só tenho um filtro de coluna única e o intervalo é definido por uma única coluna (L), que é a primeira do intervalo (portanto, uso 1 como valor).
o critérios são uma sequência que descreve o filtro a ser aplicado ao intervalo de dados. No meu exemplo, quero mostrar apenas as linhas em que a coluna L difere de 0 (portanto, usei "<> 0").
Isso é tudo. Para obter mais referências sobre o método Range.AutoFilter, consulte: https://msdn.microsoft.com/en-us/library/office/ff193884.aspx
fonte
Apenas para consolidar a (s) resposta (s):
Sorin diz:
Clique com o botão direito do mouse no nome da planilha, escolha "Visualizar código" e cole o código abaixo. Após colar, clique no ícone do Excel abaixo de "Arquivo" na parte superior esquerda ou digite Alt-F11 para retornar à exibição da planilha.
Isso permitirá a atualização automática. Não se esqueça de salvar o arquivo em um formato com suporte a macro: .xlsm.
E Chris usou esse código (o que acabei de fazer em 2010):
Se você não expandir a postagem, verá apenas a resposta longa! ;)
fonte
Desculpe, representante insuficiente para comentar. (Administradores, sinta-se à vontade para cortar isso em um comentário acima.) Resposta do usuário "danicotra" começando com "Eu também uso uma macro / VBA baseada no evento Worksheet_Change, mas minha abordagem ..." com
'first remove filter
' e aplique-a novamente
é a solução correta ao usar o Excel 2007+. No entanto .AutoFilter.ApplyFilter é inválido no XL03 e versões anteriores, então mostro o caminho abaixo.
Peço que verdadeiros especialistas e gurus leiam o código porque estou bastante confiante de que é um material de primeira qualidade. Talvez a contagem inexplicável de votos negativos nesta resposta possa ser revertida quando as pessoas vêem o que é feito de bom abaixo.
danicotra usou um exemplo simplificado. Na verdade, você pode fazer isso de maneira mais geral. Suponha com ActiveSheet o seguinte (ou algum outro objeto de planilha):
Salve o intervalo do filtro automático. Possui colunas .AutoFilter.Filters.Count e linhas (.AutoFilter.Range.Count / .AutoFilter.Filters.Count), salvas em rngAutofilter
Colete em uma matriz myAutofilters cada uma das 4 propriedades de cada um dos itens de filtro automático .AutoFilter.Filters.Count, tomando cuidado para evitar "erros definidos pelo aplicativo" quando .On ou .Operator for falso. (myAutofilters seriam redimensionados para o número de linhas e colunas na etapa 1)
Desative o filtro, mas preserve os menus suspensos com .ShowAllData
Para cada item de filtro que estava .De acordo com sua matriz salva, redefina 3 das 4 propriedades de cada um dos itens de filtro automático .AutoFilter.Filters.Count. Mais uma vez, evite "Erros definidos pelo aplicativo" quando .Operator for falso, portanto, para cada item "i",
campo rngAutofilter.AutoFilter: = i, Critérios1: = myAutofilters (i, 2)
ou
rngAutofilter.AutoFilter Field: = i, Critérios1: = myAutofilters (i, 2), Operador: = myAutofilters (i, 3), Critério2: = myAutofilters (i, 4)
Agora, o filtro automático será reinstituído, no mesmo intervalo que era antes do seu código começar, mas com o filtro automático atualizado para alterações nos dados.
fonte
fonte