在下面的代码中,我可以编写一个代码来显示文件夹中的文件名。现在的问题是我应该在正确的行中显示它们。现在它们以随机顺序显示,这不是目的。
在“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
答案 0 :(得分: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)结果如下图所示: