Итак, после долгих раскопок мне удалось найти решение. Я знаю, что все это может быть сделано в коде, но я все еще учусь, и это может помочь кому-то с той же проблемой
1. Я открыл CMD, зашел в папку, в которой находились файлы, и набрал dir /b>list.txt
. Это создало список TXT со всеми файлами в папке.
2. Я открываю txt-файл в Excel и настраиваю его так, чтобы у меня было одно имя файла на ячейку.
3. В исходном списке номеров деталей я добавил столбец справа и добавил к нему «X» только для vlookup.
4. Я использовал vlookup в списке файлов для списка деталей, чтобы увидеть, какие файлы мне потребуются.
5. Я удалил все имена файлов из списка, которых не было в списке деталей.
6. Я отсортировал имена файлов по алфавиту.
7. Я извлек номер детали из имени файла в отдельную ячейку (A3) =left(A1,14)
.
8. Сделал =A3=A4
. Независимо от того, что возвращено «ИСТИНА», было удалено (если номер детали в одной строке был равен номеру в строке ниже, это означало, что это был тот же чертеж в более старой версии).
9. С помощью приведенного ниже кода в Excel (VBA) скопируйте файлы из исходной папки в новую папку на основе списка, который я собрал.
Sub copyfiles()
Dim xRg As Range, xCell As Range
Dim xSFileDlg As FileDialog, xDFileDlg As FileDialog
Dim xSPathStr As Variant, xDPathStr As Variant
Dim xVal As String
On Error Resume Next
Set xRg = Application.InputBox("Click on the column with the file names:", "File copier", ActiveWindow.RangeSelection.Address, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xSFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xSFileDlg.Title = "Folder to copy from:"
If xSFileDlg.Show <> -1 Then Exit Sub
xSPathStr = xSFileDlg.SelectedItems.Item(1) & "\"
Set xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xDFileDlg.Title = "Folder to copy to:"
If xDFileDlg.Show <> -1 Then Exit Sub
xDPathStr = xDFileDlg.SelectedItems.Item(1) & "\"
For Each xCell In xRg
xVal = xCell.Value
If TypeName(xVal) = "String" And xVal <> "" Then
FileCopy xSPathStr & xVal, xDPathStr & xVal
End If
Next
End Sub