Подумайте о ситуации, когда вы ежедневно сталкиваетесь с большим количеством файлов Excel и вам нужен быстрый механизм, который поможет вам найти количество листов, присутствующих в каждой книге. Если у вас есть подобная проблема, не пропустите эту статью, потому что она вам очень поможет .

В этой статье мы узнаем, как подсчитать рабочие листы в нескольких файлах с кодом VBA.

Вопрос: * Мне нужен макрос, который может читать список имен файлов и возвращать количество рабочих листов, которые присутствуют в каждом из файлов (это механизм аудита, чтобы гарантировать, что правильное количество рабочих листов присутствует в серии файлы, созданные другим процессом). Макросу необходимо будет установить путь к папке, в которой находятся файлы (все в одной папке), затем найти первый файл, определить количество рабочих листов и повторить для следующего файла и т. Д.

Я думал, что могу сделать это с помощью формулы, просто сославшись на имена файлов, но я считаю, что в Excel нет прямой формулы для подсчета листов. Спасибо!

Если вы хотите прочитать исходный вопрос, нажмите здесь

Ниже приведен снимок файлов, сохраненных в папке с расширением .xlsx

img1

Примечание. Файлы, защищенные паролем, отсутствуют.

Чтобы получить код, нам нужно выполнить следующие шаги для запуска редактора VB:

Щелкните вкладку «Разработчик». В группе «Код» выберите Visual Basic

img2

  • Скопируйте приведенный ниже код в стандартный модуль

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



' Folder path where the workbooks are located.

WkbPath = "C:\Users\Test"



' Name of worksheet with the workbook list.

Set Wks = Worksheets("Sheet1")



' Starting cell of workbook list.

Set Rng = Wks.Range("A2")



' Get the range of cells in the workbook name list.

Set 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.

Set Conn = CreateObject("ADODB.Connection")

Set Cat = CreateObject("ADOX.Catalog")



' Add a final backslash the path if needed.

WkbPath = IIf(Right(WkbPath, 1) <> "\", WkbPath & "\", WkbPath)



' Step through each cell in the workbook list.

For Each Cell In Rng



' Get the worksheet count for the workbook.

ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _

& WkbPath & Cell _

& ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;"""

Conn.Open ConnStr



Set Cat.ActiveConnection = Conn



' Copy the count to the cell one column to right of the workbook name in the list.

Cell.Offset(n, 1) = Cat.Tables.Count



Conn.Close



Next Cell



' Clean up.

Set Cat = Nothing

Set Conn = Nothing

End Sub

изображение: https: //www.office-skill.site/images/wp-content-uploads-2015-07-img37.png [img3, width = 796, height = 490]

===

img4

  • Когда мы запустим макрос, мы получим количество рабочих листов. См. Снимок ниже:

img5

Примечание: указанный выше макрос будет работать с расширениями .xlsx и .xls, а не с расширениями .xlsm с поддержкой макросов.

Все вышеперечисленные файлы имеют расширение .xlsx. Давайте добавим фиктивный лист Excel, т.е. лист 10. В случае, если у нас есть файл с тем же именем, имеющий расширения .xlsx и .xls, то нам нужно указать имя файла с соответствующими расширениями как в нашем тестовом файле (столбец A), чтобы макрос мог идентифицировать файл, на который мы ссылаемся, и дать нам правильный результат.Если мы не упомянули или пропустили упоминание расширения для файла с тем же именем, тогда макрос выдаст нам количество расширений .xlsx. См. Снимок ниже:

img6

  • Чтобы получить количество листов для Листа 10 с расширениями .xlsx и .xls, нам нужно указать имя файла с соответствующими расширениями. Снимок окончательного результата показан ниже:

img7

Заключение: используя приведенный выше код макроса, мы можем подсчитать количество рабочих листов в нескольких файлах, и, если требуется, чтобы получить собственный результат, мы можем немного изменить код VBA.

rar icon

Если вам понравились наши блоги, поделитесь ими с друзьями на Facebook. А также вы можете подписаться на нас в Twitter и Facebook .

Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить, дополнить или усовершенствовать нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]