Вижте всички файлове в папка, Excel за всички
Понякога е необходимо да се извършват еднотипни операции с няколко файла, намиращи се в една и съща папка. Можете да отваряте всяка една поред: Работни книги. Отворете "C:\Нова папка\Book1.xlsx" Работни книги. Отворете "C:\Нова папка\Book2.xlsx" и т.н. Но ако има много файлове и всички с различни имена, тогава това не е много практично и със сигурност не е компактно. И тъй като малко начинаещи могат веднага да намерят това, което искат, реших да публикувам код, който обикаля всички файлове в папка и ги отваря:
Sub Get_All_File_from_Folder() Dim sFolder As String, sFiles As String 'Диалог за избор на файлова папка с Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) 'изключете актуализирането на екрана, така че действията ни да не трептят Application.ScreenUpdating = False sFiles = Dir(sFolder & "*.xls*") Do While sFiles <> "" 'отворете работна книга Workbooks.Open sFolder & sFiles 'действия с файла 'Напишете на първия лист на работната книга в клетка A1 - www.excel-vba.ru ActiveWorkbook.Sheets(1).Range("A1").Value = "www.excel-vba.ru" 'Затваряне на работната книга със запазване на промените ActiveWorkbook.Close True', ако е зададено на False - работната книга ще бъде затворена без запазване sFiles = Dir Loop 'връща предишното забранено Приложение. Актуализация на екрана на екрана Актуализиране = True End Sub
Но има друг проблем: какво ще стане, ако трябва да отворите файлове не само в посочената папка, но и във всички нейни подпапки? Горният код няма да работи в тази ситуация. Във версии на Excel 2003 и по-ранни това беше разрешено с помощта на метода .FileSearch, но в по-старите версии този метод беше блокиран от разработчиците на Microsoft по някаква причина.И остава да действаме само чрез рекурсивния метод за изброяване на папки. Следният код отваря всички Excel файлове в посочената папка, включително всички подпапки :
Опция Explicit Dim objFSO като обект, objFolder като обект, objFile като обект Sub Get_All_File_from_SubFolders() Dim sFolder като низ с Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFold er & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) Application.ScreenUpdating = False Set objFSO = CreateObject("Scripting.FileSystemObject") GetSubFolders sFolder Set objFolder = Nothing Set objFSO = Nothing Application.ScreenUpdating = True End Sub Private Sub GetSubFolders(s) Path) Dim sPathSepar ator As String, sObjName As String Set objFolder = objFSO.GetFolder(sPath) For Every objFile In objFolder.Files If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Като ".xls*" Тогава 'open workbook Workbooks.Open sPath & objFile.Name 'действия с файла 'Напишете на първия лист на работната книга в клетка A1 - www.excel-vba.ru ActiveWorkbook.Sheets(1).Range("A1").Value = "www.excel-vba.ru" ActiveWorkbook.Close True End If Next For Every objFolder In objFolder.SubFolders GetSubFolders objFolder.Path & усилвател; Application.PathSeparator Next End Sub
Ако Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Като ".xls*" Тогава
Tips_Macro_Get_All_Files_from_Folder.xls (61,5 KiB, 5329 изтегляния)
Sub Get_All_drives() Dim objDrives As Object, objDrive As Object Set objFSO = CreateObject("Scripting.FileSystemObject") Set objDrives = objFSO.Drives For Every objDrives In objDrives If objDrive.IsReady Then GetSubFolders objDrive.DriveLetter & ":\" End If Next objDrive End Sub
Търсене на етикети
Кажете ми как мога да го накарам да сканира определена папка и да показва имената на папките (не на файловете), съхранени в оригиналната папка. Тези. има папка A, в нея се съхраняват папки C, D и т.н., трябва ли Excel да показва името на папката под формата на таблица (извежда името, датата на създаване, размера) и да я показва в списъка при добавяне на нови папки?!
Благодаря ви много за много полезен скрипт! За мен работи чудесно, ако трябва да извършите някои прости операции с файлове. Ако обаче вмъкна операция с функцията Dir в кода за действие на файла (например, трябва ми програмата да създаде файл с определено име и след това, когато отварям следващия файл от посочената папка, да проверя дали вече има файл с това име или не), програмата не преминава към следващия етап от цикъла и не отваря следващия файл - ругае се в реда sFiles = Dir . Как може да се избегне подобен проблем? Аз съм лаик в програмирането, опитвам се да напиша първия си макрос за обработка на данни.
Всичко е много просто: намерете сайт, посветен на 1C, а не на Excel. Excel вижда ли тези файлове вместо вас? Така че проблемът явно не е в него.