Jak automatycznie odświeżyć automatyczny filtr Excela po zmianie danych?
Przypadek użycia: zmieniam wartość jednej komórki na wartość, która została odfiltrowana. Chcę, aby bieżący wiersz znikał bez konieczności robienia czegokolwiek innego.
microsoft-excel
sorin
źródło
źródło
Odpowiedzi:
Wydaje się, że wymiana kodu z tym również załatwia sprawę (przynajmniej w programie Excel 2010):
źródło
Odkryłem, że kiedy pracowałem ze stołami, to nie działało. Filtr nie był na arkuszu, ale na stole. ten kod załatwił sprawę
Znalazłem informacje tutaj: http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
źródło
Kliknij prawym przyciskiem myszy nazwę arkusza, wybierz „Wyświetl kod” i wklej poniższy kod. Po wklejeniu kliknij ikonę Excela poniżej „Plik” w lewym górnym rogu lub wpisz Alt-F11, aby powrócić do widoku arkusza kalkulacyjnego.
Umożliwi to automatyczne odświeżanie. Nie zapomnij zapisać pliku w formacie z obsługą makr
.xlsm
.źródło
Używam też VBA / Macro na podstawie
Worksheet_Change
zdarzenia, ale moje podejście jest nieco inne ... Ok, najpierw kod, a potem wyjaśnienia:(Użyj kombinacji klawiszy Alt+ F11, aby wyświetlić panel programowania i wklej kod do arkusza zawierającego filtr, który chcesz automatycznie odświeżać).
W moim przykładzie zakładam, że mam prosty filtr do pojedynczej kolumny (w moim przypadku L) i że mój zakres danych znajduje się w wierszach od 1 (nawet jeśli może zawierać nagłówek) do 126 (wybierz liczbę wystarczająco dużą, aby być pewnie). Operacja jest prosta: gdy coś zmienia się na moim arkuszu, filtr określonego zakresu zostaje usunięty / ponownie zastosowany, aby go odświeżyć. Trzeba tutaj trochę wyjaśnić pola i kryteriów .
Pole jest liczbą całkowitą przesunięcie zakresu. W moim przypadku mam tylko filtr jednokolumnowy, a zakres jest tworzony przez pojedynczą kolumnę (L), która jest pierwszą w zakresie (dlatego używam 1 jako wartości).
Kryteria to ciąg, który opisuje filtr, stosowany do zakresu danych. W moim przykładzie chcę pokazywać tylko wiersze, w których kolumna L różni się od 0 (stąd użyłem „<> 0”).
To wszystko. Więcej informacji na temat metody Range.AutoFilter można znaleźć na stronie : https://msdn.microsoft.com/en-us/library/office/ff193884.aspx
źródło
Wystarczy skonsolidować odpowiedzi:
Sorin mówi:
Kliknij prawym przyciskiem myszy nazwę arkusza, wybierz „Wyświetl kod” i wklej poniższy kod. Po wklejeniu kliknij ikonę Excela poniżej „Plik” w lewym górnym rogu lub wpisz Alt-F11, aby powrócić do widoku arkusza kalkulacyjnego.
Umożliwi to automatyczne odświeżanie. Nie zapomnij zapisać pliku w formacie z obsługą makr .xlsm.
Chris użył tego kodu (co właśnie zrobiłem w 2010 roku):
Jeśli nie rozwiniesz posta, zobaczysz tylko długą odpowiedź! ;)
źródło
Przepraszamy, brak wystarczającej liczby przedstawicieli do skomentowania. (Administratorzy, zachęcamy do podzielenia tego na komentarz powyżej.) Odpowiedź użytkownika „danicotra” rozpoczynająca się od „Używam również VBA / Macro na podstawie zdarzenia Worksheet_Change, ale moje podejście…” z
„pierwszym usunięciem filtra
”, a następnie zastosowanie znowu
jest poprawnym rozwiązaniem podczas korzystania z programu Excel 2007+. Jednak .AutoFilter.ApplyFilter jest nieprawidłowy w XL03 i wcześniejszych wersjach, więc pokazuję poniżej.
Błagam, aby prawdziwi eksperci i guru przeczytali kod, ponieważ jestem pewien, że jest to materiał z najwyższej półki. Być może niewytłumaczalne zdanie głosowania na tę odpowiedź może zostać odwrócone, gdy ludzie zobaczą, co dobrego zrobiono poniżej.
danicotra posłużył się uproszczonym przykładem. W rzeczywistości możesz to zrobić bardziej ogólnie. Załóż z ActiveSheet dla następującego (lub innego obiektu arkusza):
Zapisz zakres autofiltru. Ma kolumny .AutoFilter.Filters.Count i (.AutoFilter.Range.Count / .AutoFilter.Filters.Count) wiersze zapisane w rngAutofilter
Zbierz w tablicy myAutofilters każdą z 4 właściwości każdego z elementów autofiltru .AutoFilter.Filters.Count, uważając, aby uniknąć „błędów zdefiniowanych przez aplikację”, gdy .On lub .Operator ma wartość false. (myAutofilters zostaną ponownie zredukowane do liczby wierszy i kolumn w kroku 1)
Wyłącz filtr, ale zachowaj menu rozwijane z .ShowAllData
Dla każdego elementu filtru, który był .On zgodnie z zapisaną tablicą, zresetuj 3 z 4 właściwości każdego z elementów autofiltru .AutoFilter.Filters.Count. Ponownie uważaj, aby uniknąć „błędów zdefiniowanych przez aplikację”, gdy .Operator ma wartość false, więc dla każdego elementu „i”,
rngAutofilter.AutoFilter Field: = i, Criteria1: = myAutofilters (i, 2)
lub
rngAutofilter.AutoFilter Field: = i, Kryteria 1: = myAutofilters (i, 2), Operator: = myAutofilters (i, 3), Criteria2: = myAutofilters (i, 4)
Teraz autofiltr zostanie przywrócony, w tym samym zakresie, co przed rozpoczęciem kodu, ale z automatycznym filtrem zaktualizowanym pod kątem zmian danych.
źródło
źródło