Razmislite o situaciji, ko se dnevno srečujete s številnimi datotekami Excel in želite hiter mehanizem, ki vam bo pomagal najti število delovnih listov v vsakem delovnem zvezku. Če imate podobno težavo, ne smete zamuditi tega članka, saj vam bo v veliko pomoč.
V tem članku se bomo naučili, kako šteti delovne liste v več datotekah s kodo VBA.
Vprašanje:Moram makro, ki lahko prebere seznam imen datotek in vrne število delovnih listov, ki so prisotni v vsaki od datotek (to je revizijski mehanizem, ki zagotavlja, da je pravilno število delovnih listov v vrsti datotek, ustvarjenih prek drug postopek). Makro bi moral določiti pot do mape, kjer se nahajajo datoteke (vse v isti mapi), nato poiskati prvo datoteko, določiti število delovnih listov in ponoviti za naslednjo datoteko itd.
Mislil sem, da bi to lahko naredil s formulo, tako da preprosto navedem imena datotek, vendar menim, da Excel nima naravne formule za štetje delovnih listov. Hvala!
Če želite prebrati izvirno vprašanje, kliknite tukaj
Sledi posnetek datotek, shranjenih v mapi z razširitvijo .xlsx
Opomba: Ni datotek, zaščitenih z geslom.
Če želite dobiti kodo, moramo za zagon urejevalnika VB slediti spodnjim korakom:
- Kliknite zavihek Razvijalec
- V skupini Koda izberite Visual Basic
- Kopirajte spodnjo kodo v standardni modul
Sub ListSheetCounts () Dim Cell As Range Dim Conn Kot Object Dim Cat Kot Object Dim ConnStr As String Dim n As Long Dim Rng As Range Dim RngEnd As Range Dim WkbPath As Variant Dim Wks As Worksheet Pot do mape, kjer se nahajajo delovni zvezki. WkbPath = "C: \ Users \ Test" 'Ime delovnega lista s seznamom delovnega zvezka. Set Wks = Worksheets ("Sheet1") 'Začetna celica seznama delovnih zvezkov. Nastavi Rng = Wks.Range ("A2") 'Pridobite obseg celic na seznamu imen delovnega zvezka. Nastavi RngEnd = Wks.Cells (Rows.Count, Rng.Column) .End (xlUp) Če je RngEnd.Row> = Rng.Row Nato nastavite Rng = Wks.Range (Rng, RngEnd) 'Ustvarite potrebne objekte ADO iz tega makra . Set Conn = CreateObject ("ADODB.Connection") Set Cat = CreateObject ("ADOX.Catalog") 'Po potrebi dodajte zadnjo poševnico. WkbPath = IIf (Desno (WkbPath, 1) "\", WkbPath & "\", WkbPath) 'Stopite skozi vsako celico na seznamu delovnega zvezka. Za vsako celico v Rng 'Pridobite število delovnih listov za delovni zvezek. ConnStr = "Ponudnik = Microsoft.ACE.OLEDB.12.0; Vir podatkov =" _ & WkbPath & Cell _ & "; Razširjene lastnosti =" "Excel 12.0 Xml; HDR = DA; IMEX = 1;" "" Conn.Otvorite ConnStr Set Cat.ActiveConnection = Conn 'Kopirajte število v celico en stolpec desno od imena delovnega zvezka na seznamu. Cell.Offset (n, 1) = Cat.Tables.Count Conn.Close Next Cell 'Clean up. Set Cat = Nothing Set Conn = Nothing End Sub
- Ko zaženemo makro, bomo dobili število delovnih listov. Glejte spodnji posnetek:
Opomba: zgornji makro bo deloval za razširitve .xlsx in .xls in ne za razširitev, ki podpira makro .xlsm.
- Vse zgornje datoteke so razširitev .xlsx
- Dodajmo lažni list Excel, tj. List 10
- V primeru, da imamo datoteko z istim imenom z razširitvama .xlsx in .xls, moramo v svoji testni datoteki (stolpec A) omeniti ime datoteke z ustreznimi razširitvami, tako da lahko makro identificira datoteko, ki smo sklicuje na & nam dajte pravilen rezultat
- Če razširitve za datoteko z istim imenom nismo omenili ali smo jo zamudili, nam bo makro dal število razširitev .xlsx. Glejte spodnji posnetek:
- Če želite dobiti število listov za list 10 z razširitvami .xlsx in .xls, moramo omeniti ime datoteke z ustreznimi razširitvami.
Posnetek končnega rezultata je prikazan spodaj:
Zaključek: Z uporabo zgornje kode makra lahko preštejemo število delovnih listov v več datotekah; če je potrebno, da dobimo rezultat po meri, lahko malo spremenimo kodo VBA.
Če so vam bili naši blogi všeč, jih delite s prijatelji na Facebooku. Prav tako nas lahko spremljate na Twitterju in Facebooku.
Radi bi slišali od vas, nam sporočite, kako lahko izboljšamo, dopolnimo ali inoviramo svoje delo in ga izboljšamo. Pišite nam na spletni strani elektronske pošte