ivandor421
Подозреваю, что отвечал уже на другом форуме, поскольку вопрос такой же. Продублирую код:
Там 4 колонки с входящими\исходящими. Что куда вставлять?
Вот код, он смотрит в одну папку и перебирает в ней файлы, сравнивая с кодом (конец строки до тире) и подкаталоги рекрсивно
Sub GEGJ()
Dim oWB As Workbook
Dim rCell As Range, rSearchRange As Range
Dim sFolder$, sCode$, sFileName$
Dim oFso As Object
Dim oFolder As Object
Set oWB = ActiveWorkbook
sFolder = "D:\" 'я пишу Д, вы свою
'Я пишу лист1, вы своё название листа
Set rSearchRange = oWB.Sheets("Лист1").Range("B1:B" & Sheets("Лист1").Cells(Rows.Count, 2).End(xlUp).Row)
For Each rCell In rSearchRange
If Not IsEmpty(rCell.Value) Then
sCode = "-" & Right(rCell.Value, Len(rCell.Value) - InStrRev(rCell.Value, "-"))
Set oFso = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFso.GetFolder(sFolder)
Call RecursiveSubFolders(oFolder, sCode, oWB)
Else
Exit Sub
End If
Next rCell
Set oFso = Nothing
End Sub
Sub RecursiveFiles(ByRef oFolder As Object, ByVal sCode As String, ByRef oWB As Workbook)
Dim oFile As Object
Dim sFilePath As String
For Each oFile In oFolder.Files
sFil = oFile.Name
If InStr(oFile.Name, sCode) >= 1 Then
sFilePath = oFile.Path
oWB.Sheets("Лист1").Range("L" & rCell.Row) = "=HYPERLINK(" & sFilePath & ")"
End If
Next oFile
End Sub
Sub RecursiveSubFolders(ByRef oFolder As Object, ByVal sCode As String, ByRef oWB As Workbook)
Dim oSubFolder As Object
If oFolder.Subfolders.Count >= 1 Then
For Each oSubFolder In oFolder.Subfolders
Call RecursiveFiles(oFolder, sCode, oWB)
If oFolder.Subfolders.Count >= 1 Then
Call RecursiveSubFolders(oSubFolder, sCode, oWB)
End If
Next oSubFolder
Else
Call RecursiveFiles(oFolder, sCode, oWB)
End If
End Sub
Если надо в двух папках смотреть, то добавляете вокруг кода
For Цикл = 1 to 2
Select Case Цикл
'сюда пишем для входящих
Case 1:
sFolder = "ваш путь"
'сюда пишем для исходящих
Case 2:
sFolder = "ваш путь"
End Select
'А сюда код из основной процедуры
Next Цикл
И тогда ещё нужно передавать в подпроцедуры значение столбца, куда ставить.
По вашему ТЗ неясно, что должно происходить по нажатию кнопки, как выбирать столбцы для вставки ссылки, как вы собираете указывать папку поиска, заранее или каждый раз выбирать в файловой системе. А также критерии выбора участка текста ячейки, по которому будет вестись поиск в именах файлов. Если это всегда будет текст вида "-символы-символы" и ищем по символам без первого тире, то нужно это указатьо
На данный момент макрос перебирает значения столбца "B" и отбирает последние символы до тире и ищет во всех папках любого уровня вложенности на диске "D:\" файлы с именем содержащим данные символы и копирует путь к файлу в столбец L.
Разработка VBA макросы Excel, Word на
заказ.
Сказать спасибо на
Юмани