Получить имена файлов 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) результаты представлены на картинке ниже:

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