Переглянути всі файли в папці, Excel для всіх

Іноді необхідно виконати однотипні операції з кількома файлами, розташованими в одній папці. Можна відкривати кожен по черзі: Workbooks.Open "C:\Нова папка\Книга1.xlsx" Workbooks.Open "C:\Нова папка\Книга2.xlsx" і т.д. Але якщо файлів багато і все з різними іменами, то це не дуже практично і точно не компактно. А т.к. деякі початківці можуть відразу знайти бажане, я вирішив викласти код, який перебирає всі файли в папці і відкриває їх:

Sub Get_All_File_from_Folder() Dim sFolder As String, sFiles As String 'діалог запиту вибору папки з файлами With Application.FileDialog(msoFileDialogFolderPicker) If . IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) 'відключаємо оновлення екрану, щоб наші дії не миготіли Application.ScreenUpdating = False sFiles = Dir(sFolder & "*.xls*") Do While sFiles <> "" 'відкриваємо книгу Workbooks.Open sFolder & sFiles 'дії з файлом 'Запишемо на перший аркуш книги в осередок А1 - www.excel-vba.ru ActiveWorkbook.Sheets(1).Range("A1").Value = "www.excel-vba.ru" 'Закриваємо книгу із збереженням змін ActiveWorkbook.Close True 'якщо поставити False - книга буде закрита без збереження sFiles = Dir Loop 'повертаємо раніше відключене оновлення екрана Application.ScreenUpdating = True End Sub

Але є ще одна проблема: що якщо необхідно відкрити файли не тільки у зазначеній папці, а й у всіх її підпапках? Зазначений вище код не підійде в даній ситуації. У версіях Excel 2003 і молодше це вирішувалося за допомогою методу .FileSearch, але у старших версіях цей метод з якихось причин був заблокований розробниками Microsoft.І залишилося діяти лише через рекурсивний метод перебору папок. Нижче наведено код, який відкриває всі файли Excel у зазначеній папці,включаючи всі підпапки :

Option Explicit Dim objFSO As Object, objFolder As Object, objFile As Object Sub Get_All_File_from_SubFolders() Dim sFolder As String З Application.FileDialog(msoFileDialogFolderPicker) If . der & ; IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) Application.ScreenUpdating = False Set objFSO = CreateObject("Scripting.FileSystemObject") GetSubFolders sFolder Set objFolder = Nothing Set True End Sub Private Sub GetSubFolders(sPath) Dim sPathSeparator As String, sObjName As String Set objFolder = objFSO.GetFolder(sPath) Для кожного objFile Like ".xls*" Then 'відкриваємо книгу Workbooks.Open sPath & objFile.Name 'дії з файлом 'Запишемо на перший аркуш книги в осередок А1 - www.excel-vba.ru ActiveWorkbook.Sheets(1).Range("A1").Value = "www.excel-vba.ru" ActiveWorkbook .Close True End If Next Для кожного objFolder In objFolder.SubFolders GetSubFolders objFolder.Path & Application.PathSeparator Next End Sub

If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".xls*" Then

Tips_Macro_Get_All_Files_from_Folder.xls (61,5 KiB, 5 329 завантажень)

Sub Get_All_drives() Dim objDrives As Object, objDrive As Object Set objFSO = CreateObject("Scripting.FileSystemObject") Set objDrives = objFSO.Drives Для кожного objDrive In objDrives If objDrive.IsReady Then GetSubFolders objDrive.DriveLetter ":\" End If Next objDrive End Sub

  • excel
  • excel
  • папці
  • переглянути
  • excel
  • файли
  • переглянути
  • файли
  • excel
  • excel
  • файли
  • excel
  • папці
  • папці
  • файли
  • excel
  • папці
  • excel

Пошук за мітками

Підкажіть, як зробити, щоб сканувати певну папку і виводив назву папок (не файлів), що зберігаються в початковій папці. Тобто. є папка A в ній зберігаються папки C, D і т.д., потрібно щоб Excel вивів назву папки у вигляді таблиці (відображав найменування, дату створення, розмір) і при додаванні нових папок відображав у списку?!

Дякую за дуже корисний скрипт! Він у мене працює на відмінно, якщо потрібно виконати якісь прості операції у файлах. Однак, якщо я вставляю в код дій з файлом операції з функцією Dir (наприклад, мені потрібно, щоб програма створила файл із певним ім'ям, а потім при відкритті наступного файлу із вказаної папки перевірила, чи є файл із таким ім'ям чи ні), програма не переходить на наступний ступінь циклу і не відкриває наступний файл - лається на рядок sFiles = Dir. Як можна уникнути такої проблеми? У програмуванні я профан намагаюся написати свій перший макрос для обробки даних.

Все дуже просто: знайти сайт, присвячений 1С, а не Excel. Excel у Вас бачить ці файли? Отже проблема явно над ньому.