Tæl regneark i flere filer

Anonim

Overvej en situation, hvor du støder på et antal excel -filer på daglig basis, og du vil have en hurtig mekanisme til at hjælpe dig med at finde antallet af regneark, der findes i hver projektmappe. Hvis du har et lignende problem, må du ikke gå glip af denne artikel, for den vil hjælpe dig meget.

I denne artikel lærer vi, hvordan man tæller regneark i flere filer med VBA -kode.

Spørgsmål:Jeg skal makro, der kan læse en liste over filnavne igennem og returnere antallet af regneark, der er til stede i hver af filerne (dette er en revisionsmekanisme for at sikre, at det korrekte antal regneark er til stede i en række filer, der er oprettet via en anden proces). Makroen skulle etablere stien til den mappe, hvor filerne er placeret (alle i den samme mappe), derefter finde den første fil, identificere regnearkets antal og gentage for den næste fil osv.

Jeg troede, at jeg kunne gøre dette med en formel ved blot at henvise til filnavnene, men jeg tror, ​​at Excel ikke har en ligetil formel til regnearkstællinger. Tak!

Hvis du vil læse det originale spørgsmål, skal du klikke her

Følgende er et øjebliksbillede af filer, der er gemt i en mappe med .xlsx -udvidelse

Bemærk: Der er ingen adgangskodebeskyttede filer.

For at få koden skal vi følge nedenstående trin for at starte VB -editor:

  • Klik på fanen Udvikler
  • Vælg Visual Basic i kodegruppen

  • Kopier nedenstående kode i standardmodulet
Sub ListSheetCounts () Dim Cell As Range Dim Conn As Object Dim Cat As 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 'Mappesti, hvor arbejdsbøgerne er placeret. WkbPath = "C: \ Users \ Test" 'Navn på regneark med listen over projektmapper. Angiv Wks = regneark ("Sheet1") 'Startcelle på projektmappelisten. Indstil Rng = Wks.Range ("A2") 'Hent celleområdet på projektmappens navneliste. Indstil RngEnd = Wks.Cells (Rows.Count, Rng.Column) .End (xlUp) Hvis RngEnd.Row> = Rng.Row Indstil derefter Rng = Wks.Range (Rng, RngEnd) 'Opret de nødvendige ADO -objekter fra denne makro . Set Conn = CreateObject ("ADODB.Connection") Set Cat = CreateObject ("ADOX.Catalog") 'Tilføj en sidste omvendt skråstreg stien, hvis det er nødvendigt. WkbPath = IIf (Right (WkbPath, 1) "\", WkbPath & "\", WkbPath) 'Gå gennem hver celle i projektmappelisten. For hver celle i Rng 'Hent regnearketællingen for projektmappen. ConnStr = "Provider = Microsoft.ACE.OLEDB.12.0; Datakilde =" _ & WkbPath & Cell _ & "; Udvidede egenskaber =" "Excel 12.0 Xml; HDR = YES; IMEX = 1;" "" Conn.Open ConnStr Indstil Cat.ActiveConnection = Conn 'Kopier tællingen til cellen en kolonne til højre for projektmappens navn på listen. Cell.Offset (n, 1) = Cat.Tables.Count Conn.Close Next Cell 'Ryd op. Set Cat = Nothing Set Conn = Nothing End Sub 

  • Når vi kører makroen, får vi antallet af regneark. Se nedenstående snapshot:

Bemærk: Makroen ovenfor fungerer for .xlsx & .xls udvidelse og ikke for .xlsm makroaktiveret udvidelse.

  • Alle ovenstående filer er .xlsx -udvidelse
  • Lad os tilføje dummy excel -ark, dvs. ark 10
  • Hvis vi har en fil med samme navn, der har .xlsx & .xls -udvidelser, skal vi også nævne navnet på filen med deres respektive udvidelser i vores testfil (kolonne A), så makroen kan identificere den fil, vi er henviser til & giv os det korrekte resultat
  • Hvis vi ikke har nævnt eller har savnet at nævne udvidelsen til filen med samme navn, vil makroen give os optællingen af ​​.xlsx -udvidelse. Se nedenstående snapshot:

  • For at få antallet af ark til Sheet 10 med .xlsx & .xls -udvidelser skal vi nævne filnavnet med deres respektive udvidelser

Snapshotet af det endelige output er afbildet herunder:

Konklusion: Ved hjælp af ovenstående makrokode kan vi tælle antallet af regneark i flere filer, og hvis det er nødvendigt for at få det brugerdefinerede resultat, kan vi foretage lidt ændringer i VBA -kode.

Hvis du kunne lide vores blogs, kan du dele den med dine venner på Facebook. Og også du kan følge os på Twitter og Facebook.
Vi vil meget gerne høre fra dig, lad os vide, hvordan vi kan forbedre, supplere eller innovere vores arbejde og gøre det bedre for dig. Skriv til os på e -mail -stedet