0

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

在“A”列中,要搜索的文件名以类似的名称格式PBM12 调用T5103 .

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

我必须找到一种解决方案来“仅”比较上面显示的Fat 标记的字母和数字,而没有. _

正如您将看到的那样, PBM12T5103在两个名称结构中都返回了。

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

找到“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
4

1 回答 1

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

在此处输入图像描述

于 2013-06-01T10:18:34.670 回答