获取文件名FSO,比较文件名,首先按特定的名称结构排序

时间:2013-06-01 07:53:12

标签: vba excel-vba automation vlookup filesystemobject

在下面的代码中,我可以编写一个代码来显示文件夹中的文件名。现在的问题是我应该在正确的行中显示它们。现在它们以随机顺序显示,这不是目的。

在“A”列中,使用类似名称格式 PBM12 调用要搜索的文件名。 T5 103

使用类似名称格式1_29_ PBM_12_T5__103 调用要查找的实际文件名。

我必须找到一个解决方案来比较“only” Fat标记的字母和数字,如上面显示的,而不是 _

正如您将看到 PBM12T5103 在两个名称结构中都会返回。

请不要尝试固定长度计数,因为文件名是动态的,字母数量是可变的。列“A”( PBM12T5103 )的SUBSTITUTED长度的比较是比较的关键,但我无法确定这种比较。

当找到“A”列中的文件名时,在“C”列中,找到的文件的完整文件名必须显示为原始格式 1_29_PBM_12_T5__103 < / p>

当可以建立额外的列来建立比较时,可能找到解决方案吗?

在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 个答案:

答案 0 :(得分:1)

我会建议你获取文件名的不同方法。而不是FileSystemObject让我们使用简单的Dir function,它允许检查文件名的模式。

1)我的测试文件夹中的文件如下

enter image description here

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)结果如下图所示:

enter image description here