Найти папки, содержащие файл (VBA)

У меня вопрос по кодированию VBA. У меня есть электронная таблица Excel со строками, каждая из которых содержит идентификационный номер (например, ABC0123456ABC). У меня также есть папка с подпапками, имя которых похоже на идентификационный номер из файла Excel. Однако некоторые из этих подпапок содержат больше файлов (все PDF-файлы). Я хотел бы знать, в каких папках находятся файлы (а в каких нет).

Таким образом, я хотел бы выполнить поиск во всех папках, содержащих файлы с именами, взятыми из файла Excel.

Как мне лучше всего это сделать?

Вы можете использовать FileSystemObject. Поиск в Google может подбросить примеры

Harassed Dad 23.11.2018 10:37

Добро пожаловать в SO. Как мне лучше всего это сделать? Вы можете закодировать несколько циклов, чтобы проверять папки и подпапки и находить то, что вы ищете.

Foxfire And Burns And Burns 23.11.2018 10:53

Спасибо за ваши ответы! Я относительно новичок в VBA, так с чего бы мне начать? Я нашел в Google код, который близок к моему решению, но, похоже, не могу сделать его подходящим для моего набора данных и папок.

jtsbattle 23.11.2018 11:19

@jtsbattle Итак, для каждого идентификационного номера в вашем файле Excel вы хотите найти все подпапки (в определенной папке), которые содержат идентификационный номер в своем имени, а затем для каждой из этих найденных подпапок (которые содержат идентификационный номер в их имя), что вы хотите сделать? Проверить, есть ли в каждой подпапке файлы PDF? Проверить, есть ли в каждой подпапке какие-либо файлы?

chillin 23.11.2018 12:14

@chillin У меня есть список идентификационных номеров в файле Excel, и у меня есть каталог, содержащий множество папок, которые имеют те же номера, что и идентификационные номера в файле Excel. Таким образом, для каждого идентификационного номера в файле Excel также есть папка. Однако в некоторых из этих папок есть файлы, а некоторые пусты. Для каждого идентификационного номера в Excel я хотел бы знать, какие папки пусты (а, следовательно, и какие нет). Надеюсь, это проясняет это!

jtsbattle 23.11.2018 15:23

В идеале результаты можно сохранить в формате .txt. файл

jtsbattle 23.11.2018 15:32
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
6
451
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вы можете изменить это под свои нужды;

Если у меня есть такая электронная таблица (данные в диапазоне B1: B3);

где каждая строка представляет собой подпапку, и вы хотите знать, есть ли у вас файл в каждой из этих подпапок

Тогда вы можете использовать этот код. Он запишет, существует ли файл, который содержит то же имя, что показано в столбце B и столбце C.

 Public Sub FindFiles()

Dim myParentFolderLoc As String
Dim curValue As String

Dim myCell As Range
Dim myRange As Range
Dim outputRange As Range

    ' Change these to your range/Folder Location;
    Set myRange = Sheet1.Range("B1:B3")
    Set outputRange = Sheet1.Range("B1:C3") ' note the inclusion of the column to which i am writing
    myParentFolderLoc = "C:\Example Folder\"

    ' Loop through your excel cells
    For Each myCell In myRange.Cells

        If isFileInFolder(myParentFolderLoc, myCell.Value) Then
            myCell.Offset(0, 1).Value = "Files Exists"
        Else
            myCell.Offset(0, 1).Value = "No Files Exists"
        End If

    Next myCell

    ' Export to Txt
    ExportRangeToTxt outputRange

End Sub


' Loop through the folder and see if a file contains the string
Private Function isFileInFolder(folderLocation As String, folderName As String) As Boolean

   Dim i As Integer
   i = 0
   file = Dir(folderLocation & folderName & "\")

   While (file <> "")
     i = i + 1
     file = Dir
  Wend

    If i > 0 Then
        isFileInFolder = True
    Else
        isFileInFolder = False
    End If


End Function


Private Sub ExportRangeToTxt(myRange As Range)

Dim myFile As String
Dim rng As Range
Dim cellValue As Variant
Dim i As Integer
Dim j As Integer

myFile = Application.DefaultFilePath & "\output.txt"
Set rng = myRange

Open myFile For Output As #1

For i = 1 To rng.Rows.Count
    For j = 1 To rng.Columns.Count
        cellValue = rng.Cells(i, j).Value

        If j = rng.Columns.Count Then
            Write #1, cellValue
        Else
            Write #1, cellValue,
        End If
  Next j
Next i

Close #1

MsgBox "Text Export Complete - Check the file at: " & myFile

End Sub

Это экспортирует файл в путь к файлу приложения по умолчанию - в окне сообщения будет указано, где он находится.

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

Спасибо! Однако файлы внутри папок не имеют того же имени, что и папка. Таким образом: у меня есть список значений в Excel с идентификационными номерами (например, ABCDE1234), и у меня есть список папок с одинаковыми именами. Однако некоторые из этих папок содержат файлы, а некоторые нет. Мне только нужно знать, какие папки содержат файлы, а какие пустые.

jtsbattle 23.11.2018 15:06

В идеале результаты можно сохранить в файле .txt.

jtsbattle 23.11.2018 15:32

Итак, что в вашем листе Excel - это папка - и вам нужно знать, в каких папках есть файлы? и все они подпапки под родительской папкой?

James Cooke 23.11.2018 15:47

Да это именно то, что мне нужно!

jtsbattle 23.11.2018 16:11

тогда продолжайте .. это пятница, я добавлю .txt вещь.

James Cooke 23.11.2018 16:12

Идеально! Большое тебе спасибо!

jtsbattle 23.11.2018 17:02

быстрый вопрос: этот код также ищет подпапки? Теперь у меня есть новый набор данных, который на один уровень выше.

jtsbattle 27.11.2018 11:40

Другие вопросы по теме