Помислете за ситуация, при която ежедневно се сблъсквате с голям брой Excel файлове и искате бърз механизъм, който да ви помогне да намерите броя на работните листове, присъстващи във всяка работна книга. Ако имате подобен проблем, не трябва да пропускате тази статия, защото тя ще ви помогне много.
В тази статия ще научим как да броим работни листове в множество файлове с код VBA.
Въпрос:Имам нужда от макрос, който може да прочете списък с имена на файлове и да върне броя на работните листове, които присъстват във всеки от файловете (това е одитен механизъм, за да се гарантира, че правилния брой работни листове присъстват в поредица от файлове, създадени чрез друг процес). Макросът ще трябва да установи пътя на папката, където се намират файловете (всички в една и съща папка), след това да намери първия файл, да идентифицира броя на работния лист и да повтори за следващия файл и т.н.
Мислех, че мога да направя това с формула, като просто направя препратка към имената на файловете, но вярвам, че Excel няма ясна формула за броене на работни листове. Благодаря!
Ако искате да прочетете оригиналния въпрос, щракнете тук
Следва моментна снимка на файлове, запазени в папка с разширение .xlsx
Забележка: Няма файлове, защитени с парола.
За да получим кода, трябва да следваме стъпките по -долу, за да стартираме VB редактор:
- Кликнете върху раздела Разработчик
- От групата Кодове изберете Visual Basic
- Копирайте кода по -долу в стандартния модул
Sub ListSheetCounts () Dim Cell As Range Dim Conn As Object Dim Cat Като 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 'Път на папката, където се намират работните книги. WkbPath = "C: \ Users \ Test" 'Име на работен лист със списъка на работната книга. Set Wks = Worksheets ("Sheet1") 'Начална клетка на списъка с работни книги. Задайте Rng = Wks.Range ("A2") 'Вземете диапазона от клетки в списъка с имена на работната книга. Задайте RngEnd = Wks.Cells (Rows.Count, Rng.Column) .End (xlUp) Ако RngEnd.Row> = Rng.Row След това задайте Rng = Wks.Range (Rng, RngEnd) 'Създайте необходимите ADO обекти от този макрос . Задайте Conn = CreateObject ("ADODB.Connection") Задайте Cat = CreateObject ("ADOX.Catalog") 'Добавете последна обратна наклонена черта на пътя, ако е необходимо. WkbPath = IIf (Вдясно (WkbPath, 1) "\", WkbPath & "\", WkbPath) 'Преминете през всяка клетка в списъка на работната книга. За всяка клетка в Rng 'Вземете броя на работните листове за работната книга. ConnStr = "Доставчик = Microsoft.ACE.OLEDB.12.0; Източник на данни =" _ & WkbPath & Cell _ & "; Разширени свойства =" "Excel 12.0 Xml; HDR = ДА; IMEX = 1;" "" Conn.Open ConnStr Set Cat.ActiveConnection = Conn 'Копирайте броя в клетката една колона вдясно от името на работната книга в списъка. Cell.Offset (n, 1) = Cat.Tables.Count Conn.Close Next Cell 'Cleaning. Set Cat = Nothing Set Conn = Nothing End Sub
- Докато изпълняваме макроса, ще получим броя на работните листове. Вижте моментната снимка по -долу:
Забележка: горният макрос ще работи за .xlsx & .xls разширение, а не за .xlsm разширение с активирани макроси.
- Всички горепосочени файлове са .xlsx разширение
- Нека добавим фиктивен лист Excel, т.е. лист 10
- В случай, че имаме файл със същото име с разширения .xlsx и .xls, тогава трябва да споменем името на файла със съответните им разширения, както и в нашия тестов файл (колона А), така че макросът да може да идентифицира файла, който сме позовавайки се на & ни дайте правилния резултат
- Ако не сме споменали или сме пропуснали да споменем разширението за файла със същото име, тогава макросът ще ни даде броя на .xlsx разширението. Вижте моментната снимка по -долу:
- За да получим броя листове за лист 10 с разширения .xlsx & .xls, трябва да споменем името на файла със съответните им разширения
Моменталната снимка на крайния изход е изобразена по -долу:
Заключение: Използвайки горния макро код, можем да преброим броя на работните листове в множество файлове и ако е необходимо, за да получим персонализиран резултат, можем да направим малка промяна във VBA кода.
Ако ви харесаха нашите блогове, споделете го с приятелите си във Facebook. Можете също така да ни следвате в Twitter и Facebook.
Ще се радваме да чуем от вас, уведомете ни как можем да подобрим, допълним или обновим работата си и да я подобрим. Пишете ни на имейл сайта