Počítejte listy ve více souborech

Anonim

Zvažte situaci, kdy se denně setkáváte s množstvím souborů aplikace Excel a chcete rychlý mechanismus, který vám pomůže najít počet pracovních listů obsažených v každém sešitu. Pokud máte podobný problém, nesmíte tento článek minout, protože vám hodně pomůže.

V tomto článku se naučíme počítat listy ve více souborech s kódem VBA.

Otázka:Potřebuji makro, které dokáže přečíst seznam názvů souborů a vrátit počet pracovních listů, které jsou přítomny v každém ze souborů (jedná se o mechanismus auditu, který zajišťuje, že v řadě souborů vytvořených prostřednictvím jiný proces). Makro by muselo určit cestu ke složce, kde jsou umístěny soubory (všechny ve stejné složce), poté vyhledat první soubor, identifikovat počet listů a opakovat pro další soubor atd.

Myslel jsem, že bych to mohl udělat pomocí vzorce prostým odkazováním na názvy souborů, ale věřím, že Excel nemá přímý vzorec pro počty listů. Dík!

Pokud si chcete přečíst původní otázku, klikněte sem

Následuje snímek souborů uložených ve složce s příponou .xlsx

Poznámka: Neexistují žádné soubory chráněné heslem.

Chcete -li získat kód, musíme ke spuštění editoru VB provést následující kroky:

  • Klikněte na kartu Vývojář
  • Ze skupiny kódů vyberte Visual Basic

  • Zkopírujte níže uvedený kód do standardního modulu
Sub ListSheetCounts () Dim buňka jako rozsah Dim Conn jako objekt Dim Cat Cat jako Object Dim ConnStr jako řetězec Dim n jako Long Dim Rng As Range Dim RngEnd As Range Dim WkbPath As Variant Dim Wks As Worksheet 'Cesta ke složce, kde jsou umístěny sešity. WkbPath = "C: \ Users \ Test" 'Název listu se seznamem sešitu. Nastavit Wks = Pracovní listy ("List1") 'Počáteční buňka seznamu sešitů. Nastavit Rng = Wks.Range ("A2") 'Získá rozsah buněk v seznamu názvů sešitů. Nastavit RngEnd = Wks.Cells (Rows.Count, Rng.Column) .End (xlUp) If RngEnd.Row> = Rng.Row Then Set Rng = Wks.Range (Rng, RngEnd) 'Create the needed ADO objects fro this macro . Nastavit Conn = CreateObject ("ADODB.Connection") Nastavit Cat = CreateObject ("ADOX.Catalog") 'V případě potřeby přidejte konečné zpětné lomítko. WkbPath = IIf (Right (WkbPath, 1) "\", WkbPath & "\", WkbPath) 'Projděte každou buňku v seznamu sešitů. Pro každou buňku v Rng 'Získejte počet listů pro sešit. ConnStr = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" _ & WkbPath & Cell _ & "; Extended Properties =" "Excel 12.0 Xml; HDR = YES; IMEX = 1;" "" Conn.Open ConnStr Nastavit Cat.ActiveConnection = Conn 'Zkopírujte počet do buňky o jeden sloupec vpravo od názvu sešitu v seznamu. Cell.Offset (n, 1) = Cat.Tables.Count Conn.Close Next Cell 'Clean up. Set Cat = Nothing Set Conn = Nothing End Sub 

  • Když spustíme makro, zjistíme počet pracovních listů. Viz níže snímek:

Poznámka: výše uvedené makro bude fungovat pro příponu .xlsx a .xls a ne pro rozšíření povolená v makrech .xlsm.

  • Všechny výše uvedené soubory mají příponu .xlsx
  • Přidáme fiktivní list Excelu, tj. List 10
  • V případě, že máme soubor se stejným názvem s příponami .xlsx a .xls, pak musíme v našem testovacím souboru (sloupec A) uvést také název souboru s příslušnými příponami, aby makro identifikovalo soubor, kterým jsme odkazovat na & poskytnout nám správný výsledek
  • Pokud jsme nezmínili nebo zmeškali zmínit příponu souboru se stejným názvem, pak nám makro poskytne počet přípony .xlsx. Viz níže snímek:

  • Abychom získali počet listů pro list 10 s příponami .xlsx a .xls, musíme uvést název souboru s příslušnými příponami

Snímek konečného výstupu je zobrazen níže:

Závěr: Pomocí výše uvedeného kódu makra můžeme spočítat počet listů ve více souborech a pokud to vyžaduje vlastní výsledek, můžeme v kódu VBA provést malou změnu.

Pokud se vám naše blogy líbily, sdílejte je se svými přáteli na Facebooku. A také nás můžete sledovat na Twitteru a Facebooku.
Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit, doplnit nebo inovovat naši práci a zlepšit ji pro vás. Napište nám na e -mail