【发布时间】:2018-08-19 15:06:07
【问题描述】:
我有许多文件夹名称中带有日期。
如果我有三个文件夹,分别命名为 20150605abcdef、20161204ghijk、20180612ikled。
我想编写一个 VBA 代码,它将返回具有最新日期的文件夹的目录。
在这种情况下,它将返回 20180612ikled。
【问题讨论】:
我有许多文件夹名称中带有日期。
如果我有三个文件夹,分别命名为 20150605abcdef、20161204ghijk、20180612ikled。
我想编写一个 VBA 代码,它将返回具有最新日期的文件夹的目录。
在这种情况下,它将返回 20180612ikled。
【问题讨论】:
把它放在 Excel 中。然后将该文件移动到结构中的第一个文件夹,然后启动 Macro ReadStructure。它将以清晰的树形结构将所有文件夹和子文件夹中的所有数据写入 Excel 的第一张表。然后,您可以使用 Excel 内置工具来查找上次日期,例如 ex。过滤您的列表。
我为您翻译了德语版本。很抱歉,如果某些部分仍在德语中 Folder=Ordner、Spalte=Column、Zeile=Row、Pfad=Path。那部分我很懒
Option Explicit
Sub ReadStructure()
Dim lngZeile As Long
Dim lngSpalte As Long
Dim strPFad As String
strPFad = ThisWorkbook.Path
'Clear all cells form sheet 1
sheet1.Cells.ClearContents
sheet1.Range("A1").Value = strPFad
lngZeile = 2
Call ReadFilesFolder(strPFad, lngZeile, lngSpalte)
End Sub
Sub ReadFilesFolder(strPFad As String, ByRef lngZeile, ByRef lngSpalte)
Dim oFSO As Object
Dim objOrdner As Object
Dim objUnterordner As Object
Dim objDatei As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set objOrdner = oFSO.getfolder(strPFad)
lngSpalte = lngSpalte + 1
'Check with loop for folders
For Each objDatei In objOrdner.Files
lngZeile = lngZeile + 1
sheet1.Cells(lngZeile, lngSpalte).Value = objDatei.Name
sheet1.Cells(lngZeile, lngSpalte).Font.Bold = True
Next objDatei
For Each objUnterordner In objOrdner.Subfolders
lngZeile = lngZeile + 1
sheet1.Cells(lngZeile, lngSpalte).Value = objUnterordner.Name & "\"
sheet1.Cells(lngZeile, lngSpalte).Font.Bold = False
Call ReadFilesFolder(objUnterordner.Path, lngZeile, lngSpalte)
Next objUnterordner
lngSpalte = lngSpalte - 1
Set oFSO = Nothing
Exit Sub
Fehler:
If Err.Number = 70 Then
lngZeile = lngZeile + 1
sheet1.Cells(lngZeile, lngSpalte).Value = "No Acess"
End If
lngSpalte = lngSpalte - 1
Set oFSO = Nothing
End Sub
【讨论】: