< návrat zpět

MS Excel


Téma: VBA - Rozšířený filtr rss

Zaslal/a 5.12.2019 8:33

Zdravím

Mám sešit se dvěma listy. V jednom listu je tabulka se záznamy (logy) příjmů a výdejů jednotlivých komponent ve skladu. V druhém listu se pokouším dát dohromady makro, které mi hromadně vyexportuje skladovou kartu ke každému z materiálů a to v rozmezí datumu, který si zvolím.

Umím si udělat makro, která mi vyexportuje vyfiltrované data hromadně do .pdf souborů pomocí cyklu, ale narazil jsem na dva problémy:

Mám sešit se dvěma listy
- POHYBY: Obsahuje tabulku, kde se logují vstupy a výstupy jednotlivých materiálů
- SKLADOVE_KARTY: Rozhraní, kde si uživatel zvolí konkrétní materiál a časové období, které jej zajímá

Pokouším se udělat makro, které mi:
- Na základě požadavku vyfiltruje data z tabulky v listu POHYBY do listu SKLADOVE_KARTY
- Před vyfiltrované data vloží řádek s počátečním datumem období, které mě zajímá
- Za vyfiltrované data vloží řádek s konečným datumem období, které mě zajímá
- Vyexportuje takto vytvořený list do .pdf a uloží do složky.

Jednou ročně budu potřebovat vyexportovat skladovou kartu ke každému materiálu, takže si umím udělat makro, které mi pomocí cyklu FOR automaticky doplní vstupní formulář a vyexportuje. Narazil jsem ale na problém, kdy nedokážu vyfiltrovat data. Už jsem i převzal kód z příkladu na internetu, ale příklad funguje, ale v mém sešitu ne. Mnohokrát jsem již prošel a krokoval, ale nepřišel jsem na to, kde dělám chybu. Nevím, jak vložit řádek za vyfiltrovanou tabulku, když je délka tabulky proměnná, ale předpokládám použití podmínky a hledání prázdného řádku. Zastavil jsem se ale na tom filtrování a bez něj nemohu pokračovat.

Mohu poprosit, jestli by se někdo nekoukl a nezkontroloval, kde mám v kódu chybu?

Sub FILTRUJ_SKLADOVE_KARTY()
Sheets("SKLADOVE_KARTY").Select
Range("A10").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Clear

Sheets("POHYBY").Range("LOG_POHYBU[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Sheets("POHYBY").Range("K1:K2"), CopyToRange:=Sheets("SKLADOVE_KARTY").Range("A10"), Unique:=True
Columns.AutoFit
Range("A10").Select
End Sub

Zaslat odpověď >

#045213
avatar
Zapomněl jsem přiložit soubor
Příloha: zip45213_skladove_karty.zip (43kB, staženo 20x)
citovat
#045214
elninoslov
Nemôžete mať rozsah "LOG_POHYBU[#All]" ale iba "LOG_POHYBU", lebo to nieje Tabuľka ale iba tabuľka.
Nemôžete použiť Rozšírený filter s parametrom na rozsah bez hlavičiek. Ako by potom určil, ktorý parameter (stĺpec) máte na mysli? Takže LOG_POHYBU nemôže byť =POHYBY!$A$2:$I$523 ale =POHYBY!$A$1:$I$523.
Potom sa Vám ale bude dávať do výsledku logicky aj hlavička, teda nemajte v skladovej karte dvojitú predvyplnenú hlavičku (riadky 7, 8), ale na 7. vkladajte výsledok filtra.
Ale aj tak je to celé také zvláštne. Vy teda potrebujete vyfiltrovať k určitému materiálu za určité obdobie všetky pohyby? Nechcete použiť KT?

EDIT:
Načo sa má presne používať tlačítko FILTRUJ s makrom FILTR_SKLADKARTA? Veď na tento list sa predsa nedostane iný materiál ako ten filtrovaný z rozšíreného filtra.

Makro POHYB_MATERIALU - na aké rozsahy A3:H3 sa to odkazuje, keď také ani v jednom z listov neobsahujú popisované parametre? Podľa mňa tam musíte mať ešte jeden list, v ktorom zadávate tie pohyby, ale ten neexistujúci "ODPIS_MATERIALU" (spomínaný v makre "odpisMaterialu") to asi nebude.

NazevListu + ZRUS_FILTRY - Zisťovanie mena aktívneho listu, na ktorom bolo stlačené tlačítko je zbytočné, stačí dať iba ActiveSheet.AutoFilterMode = False
lebo aktívny bude práve ten, na ktorom sa kliká na tlačítko.

Zbytočné je aj filtrovanie FILTR_DATUM a FILTR_DATUM_2 na skladovej karte, veď tam iné dátumy byť nemôžu, keď ich tam nafiltruje podľa rovnakých kritérií z rovnakých buniek pred tým Rozšírený filter.

Hľadanie posledného vyplneného riadku nerobte v cykle Do While ale pomocou End(xlDown), alebo End(xlUp).

...
ostatné sa mi príliš študovať nechcecitovat
#045215
avatar
Zdravím a děkuji za reakci.

Tyto dva listy jsou součástí sešitu, který má mimo jiné funkci zapisování pohybu materiálu, takže obsahuje skutečně ještě další listy. Makra, které tento sešit obsahuje, jsou tedy buď kódy, které se vztahují k dalším listům, nebo jde o mé neúspěšné pokusy a které jsem chybně nesmazal, takže moje chyba a jen jsem zmátl.

V příloze posílám ještě jednou tabulku, kde jsou odmazány zbytečné kódy a tlačítka.

Nyní jsem ve fázi, kdy mi filtrování dle druhu materiálu funguje. Nepochopil jsem ale úplně přesně to filtrování dle datumu. Vyfiltruji si přece nejdříve druh materiálu a dále musím vytvořit filtr pro zobrazení jen těch materiálů, které jsou v daném období, ne?

A ještě drobnost: V buňkách C2 a C3 je provázaný seznam, který ale nefunguje správně. V buňce C3 potřebuji zobrazit jen ty materiály, které patří do rodiny z buňky C2, což se neděje. Správně funguje jen ve chvíli, kdy v listu POHYBY seřadím sloupec „Druh materiálu:“ vzestupně. Je nějaká možnost to ošetřit jinak, nebo je lepší použít další makro pro seřazování?

Děkuji
Příloha: zip45215_skladove_karty-2.zip (205kB, staženo 17x)
citovat
#045221
avatar

elninoslov napsal/a:


Zbytočné je aj filtrovanie FILTR_DATUM a FILTR_DATUM_2 na skladovej karte, veď tam iné dátumy byť nemôžu, keď ich tam nafiltruje podľa rovnakých kritérií z rovnakých buniek pred tým Rozšírený filter.


Tak ještě jinak. Potřebuji vyfiltrovat konkrétní materiál a vyfiltrované data vyexportovat do nového listu.

Následně tyto data musím ještě jednou vyfiltrovat, aby se zobrazily pouze hodnoty v mnou vybraném období.

Mám to tedy tak, že jsem filtrování udělal ve dvou krocích. Nejdříve AdvancedFilter nakopíruje pouze konkrétní materiál a následně AutoFilter vyfiltruje vyfiltrované data pro období.

Takhle to funguje, ale chápu to správně, že by uměl i to období filtrovat AdvancedFilter?
Příloha: zip45221_skladove_karty.zip (203kB, staženo 23x)
citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje