Здравствуйте. Есть вот такой приём, но у меня он почему-то вставляет только одно значение - неважно, сколько файлов в каталоге, пишет одно название и всё. Может кто увидит, где ошибка? И параллельно. вопрос. Можно ли сделать так, чтобы этот макрос добавлял данные, не перезаписывая? Т.е., открыв книгу в которой уже есть список файлов на листе, запустив макрос, на выходе получить файл с обновлёнными данными? При этом чтобы не добавлял уже существующие, а только такие, которых нет?
Есть ещё вот такой код. Вопрос: как и что нужно прописать так, чтобы он искал по 2 определённым папкам, и выводил информацию в столбцы А,В? Т.е. в столбец А мне нужно вывести список файлов из папки 1, в столбец 2 - список файлов из папки 2.
Код
Sub ListAllFileNames()
Dim strTargetFolder As String, strFileName As String, nCountItem As Integer
' Initialization
nCountItem = 1
strTargetFolder = "C:\Users\Sample\Desktop\Sales Volume" & "\"
strFileName = Dir(strTargetFolder, vbDirectory)
' Get the file name
Do While strFileName <> ""
If strFileName <> "." And strFileName <> ".." Then
Cells(nCountItem, 1) = strFileName
nCountItem = nCountItem + 1
End If
strFileName = Dir
Loop
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous,здравствуйте. с 1го пункта и был задан вопрос:) п.2 тоже видела, спасибо
Цитата
rinolga написал: И параллельно. вопрос.Можно ли сделать так, чтобы этот макрос добавлял данные, не перезаписывая? Т.е., открыв книгу в которой уже есть список файлов на листе, запустив макрос, на выходе получить файл с обновлёнными данными? При этом чтобы не добавлял уже существующие, а только такие, которых нет?
rinolga написал: Можно ли сделать так, чтобы этот макрос добавлял данные, не перезаписывая? ... только такие, которых нет?
Если список файлов НЕ очищать, то в нем могут (и будут) оставаться файлы, которые существовали на момент формирования списка, но затем удаленные/перемещенные из этой папки, а так список файлов всегда будет актуальным
Согласие есть продукт при полном непротивлении сторон
Sub FileList()
Dim arrFolders(), I&, allPath$
With Worksheets("Information")
Application.ScreenUpdating = False
.Range("A1:B" & .UsedRange.Rows.Count).ClearContents
With .Range("A1:B1")
.Font.Bold = True
.Font.Size = 12
.Value = "ім'я файлу"
End With
End With
allPath = "d:\MyFolders\" 'общая часть пути к папкам
arrFolders = Array("Folder1", "Folder2") 'массив имен папок для просмотра
'если целевые папки лежат в разных папках/дисках, то в массив нужно записывать полные пути к ним,
'или оставить диалог выбора папок
For I = 0 To UBound(arrFolders)
'вызов процедуры вывода списка, если надо - true
ListFilesInFolder allPath & arrFolders(I), I + 1, True
Next
Application.ScreenUpdating = True
End Sub
Private Sub ListFilesInFolder(ByVal SourceFolderName$, N&, ByVal IncludeSubFolders As Boolean)
Dim FSO As Object
Dim SourceFolder As Object
Dim SubFolder As Object
Dim FileItem As Object
Dim r As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.getfolder(SourceFolderName)
r = Cells(Rows.Count, N).End(xlUp).Row + 1 'находиим 1ю пустую строку
'выводим только имя файла
For Each FileItem In SourceFolder.Files
Cells(r, N).Formula = FileItem.Name
r = r + 1
Next FileItem
'повторная процедура для каждой вложенной папки
If IncludeSubFolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, N, True
Next SubFolder
End If
Columns("A:B").AutoFit
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
End Sub
Юрий М, спасибо, работает!! Sanja, и Вам спасибо, в процессе проверки как раз - правда код не хочет нормально вставляться, воюю... Скопировался ещё раз спасибо огромное! по поводу вопроса о путях папок - да, на одном диске. Грубо говоря путь такой: С:\123\абв\папка1, а для второй С:\123\абв\гдж\папка2. Думаю смогу подправить
Приветствую Всех! Из всех тем эта наиболее близка по смыслу моей сложности. У меня есть заранее прописанный список файлов, которые всегда имеют идентичные имена и расширения. Предположим файлы "Ира", "Вася", "Петя", "Света" Всего их девять штук и они всегда лежат в одной и той же папке (для примера папка "Дети"). Все файлы разного типа и метод загрузки для каждого из них свой.
Рабочий файл ОДНИМ макросом подгружает данные из этих файлов, поочерёдно из каждого файла. Я не смог пока найти решение следующей задачи: На кнопке макроса прописан код: If Dir("C:\Дети\Импорт\Вася.xlsx") = "" Then MsgBox "нет файла Вася.xlsx" End If И так для каждого файла. Но с одной стороны это громоздко как-то, а потом, при начале загрузки данных, если какой-то файл отсутствует, то предварительно уже выполненные действия макросом, просто останавливаются.. Вопрос: Как проверить наличие не каждого отдельно файла, а сразу всего списка, через одно применение "If ", чтобы при отсутствии любого из этих файлов макрос просто завершился ? Спасибо !
Dim fs, f, nof$
fs = Array("f1", "f2", "f3")
For Each f In fs
If Dir(f) = "" Then nof = nof & vbLf & f
Next
If Len(nof) Then MsgBox nof, vbCritical, "Не найдено!!!": Exit Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
[URL=#]?[/URL] 1 2 3 4 5 6 Dim fs, f, nof$ fs = Array( "f1" , "f2" , "f3" ) For Each f In fs If Dir(f) = "" Then nof = nof & vbLf & f Next If Len(nof) Then MsgBox nof, vbCritical, "Не найдено!!!" : Exit Sub
Под "f1" понимается полное имя каждого файла, включая путь и его расширение?
да, то, что вы можете в Dir запихнуть "C:\Дети\Импорт\Вася.xlsx" или может быть только имя файла и тогда If Dir("C:\Дети\Импорт\" & f) .... если все дети импортные
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Да вот что-то не выходит у меня... Ругается, причём в окно выводит список тех файлов, которые на самом деле лежат в папке. Даже при полном наличии всех файлов не хочет пропускать запуск макроса