Количество листов в нескольких файлах
Подумайте о ситуации, когда вы ежедневно сталкиваетесь с большим количеством файлов Excel и вам нужен быстрый механизм, который поможет вам найти количество листов, присутствующих в каждой книге. Если у вас есть подобная проблема, не пропустите эту статью, потому что она вам очень поможет .
В этой статье мы узнаем, как подсчитать рабочие листы в нескольких файлах с кодом VBA.
Вопрос: * Мне нужен макрос, который может читать список имен файлов и возвращать количество рабочих листов, которые присутствуют в каждом из файлов (это механизм аудита, чтобы гарантировать, что правильное количество рабочих листов присутствует в серии файлы, созданные другим процессом). Макросу необходимо будет установить путь к папке, в которой находятся файлы (все в одной папке), затем найти первый файл, определить количество рабочих листов и повторить для следующего файла и т. Д.
Я думал, что могу сделать это с помощью формулы, просто сославшись на имена файлов, но я считаю, что в Excel нет прямой формулы для подсчета листов. Спасибо!
Если вы хотите прочитать исходный вопрос, нажмите здесь
Ниже приведен снимок файлов, сохраненных в папке с расширением .xlsx
Примечание. Файлы, защищенные паролем, отсутствуют.
Чтобы получить код, нам нужно выполнить следующие шаги для запуска редактора VB:
Щелкните вкладку «Разработчик». В группе «Код» выберите Visual Basic
-
Скопируйте приведенный ниже код в стандартный модуль
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]
===
-
Когда мы запустим макрос, мы получим количество рабочих листов. См. Снимок ниже:
Примечание: указанный выше макрос будет работать с расширениями .xlsx и .xls, а не с расширениями .xlsm с поддержкой макросов.
Все вышеперечисленные файлы имеют расширение .xlsx. Давайте добавим фиктивный лист Excel, т.е. лист 10. В случае, если у нас есть файл с тем же именем, имеющий расширения .xlsx и .xls, то нам нужно указать имя файла с соответствующими расширениями как в нашем тестовом файле (столбец A), чтобы макрос мог идентифицировать файл, на который мы ссылаемся, и дать нам правильный результат.Если мы не упомянули или пропустили упоминание расширения для файла с тем же именем, тогда макрос выдаст нам количество расширений .xlsx. См. Снимок ниже:
-
Чтобы получить количество листов для Листа 10 с расширениями .xlsx и .xls, нам нужно указать имя файла с соответствующими расширениями. Снимок окончательного результата показан ниже:
Заключение: используя приведенный выше код макроса, мы можем подсчитать количество рабочих листов в нескольких файлах, и, если требуется, чтобы получить собственный результат, мы можем немного изменить код VBA.
Если вам понравились наши блоги, поделитесь ими с друзьями на Facebook. А также вы можете подписаться на нас в Twitter и Facebook .
Мы будем рады услышать от вас, дайте нам знать, как мы можем улучшить, дополнить или усовершенствовать нашу работу и сделать ее лучше для вас. Напишите нам на [email protected]