Получить имена файлов FSO со сравнением имен файлов, чтобы отсортировать сначала по определенной структуре имен
В приведенном ниже коде я мог бы написать код для отображения имен файлов из папки. Проблема в том, что теперь я должен отображать их в правильной строке. Пока они отображаются в случайной последовательности, и это не цель.
В столбце "A" имена файлов для поиска вызываются с аналогичным форматом имен PBM12.T5.103
Фактическое имя файла для поиска вызывается с аналогичным форматом имени 1_29_PBM_12_T5__103.
Я должен найти решение, чтобы сравнить "только" жирные буквы и цифры, как показано здесь выше, без . или _
Как вы увидите, PBM12T5103 возвращается в обеих структурах имен.
Пожалуйста, не пытайтесь считать фиксированную длину, потому что имена файлов являются динамическими, а количество букв - переменным. Сравнение ЗАМЕНЕННОЙ длины столбца "А" (PBM12T5103) является ключом к сравнению, но я не могу справиться, чтобы установить это сравнение.
Когда имя файла в столбце "A" найдено, в столбце "C" полное имя файла найденного файла должно отображаться в исходном формате 1_29_PBM_12_T5__103
Может быть, можно найти решение, когда можно создать дополнительные столбцы для сравнения?
В Excel я мог бы подойти к решению, но это не будет работать в автоматическом режиме, как это должно быть.
Я сделал LEN(считать динамический), но это все еще не решение для отображения полных имен файлов в нужной строке...
Надеюсь, кто-нибудь может мне помочь..
Option Explicit
Sub fileNames_in_folder()
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Dim fldpath
Dim fld As Object, fil As Object, fso As Object, j As Long
fldpath = "C:\"
On Error Resume Next
Thisworkbook.Sheets("1").Activate
'start count row
j = 11
Set fso = CreateObject("scripting.filesystemobject")
Set fld = fso.getfolder(fldpath)
For Each fil In fld.Files
'here I have to add an IF statement in order to compare the filenames written in column "A" with files from folderPath C:\"
'When the correct files is found it should be displayed in column "C"
If
then
Cells(j, 34).Value = fso.GetBaseName(fil.path)
End If
'count behaviour
j = j + 1
Next
Columns("AH").AutoFit
End Sub
1 ответ
Я предложу вам другой способ получения имен файлов. Вместо FileSystemObject
давайте использовать простой Dir function
что позволяет проверить шаблон имени файла.
1) Файлы в моей папке тестирования следующие
2) Я предположил, что шаблон файла выглядит следующим образом:
XXXY.Z.W
где:
XXX > 3 letters text
Y > any length number/text
Z > any length number/text
W > any length number/text
3) Код подпрограммы помещается в 2013-06-01...xlsm
файл, который вы могли видеть на картинке выше (та же папка, где находятся ваши файлы). Код выглядит следующим образом (при необходимости измените):
Sub solution()
Dim j As Long, LastRow As Long
Dim fldPath
'your path below
fldPath = ThisWorkbook.Path
ChDir fldPath
Dim arrPattern As Variant
Dim filName As String
For j = 1 To Range("A1").End(xlDown).Row
arrPattern = Split(Cells(j, "A"), ".")
'I suggest to use different way of checking _
pattern of file name. Pattern rules:
'*YYY*XX*Z*W*
filName = Dir("*" & Left(arrPattern(0), 3) & "*" & _
Mid(arrPattern(0), 4) & "*" & _
arrPattern(1) & "*" & _
arrPattern(2) & "*")
If Len(filName) > 0 Then
Cells(j, "B") = filName
Else
Cells(j, "B") = "not found"
End If
Next j
End Sub
4) результаты представлены на картинке ниже: