用于删除包含特定字符的目录中的文件的VBA代码

时间:2014-06-13 03:46:53

标签: excel vba excel-vba

我需要一个VBA宏中的帮助,它将删除包含2个以上“_”的目录中的文件,并且超过3个月,但是有一些文件夹&目录中不得触及或修改的子文件夹。

例如,Hi_Thanks_for_your_help Hi_Thank_You等。

Const DIR = "x"
Const MAX_AGE = 3 ' Unit: Months

Dim oFSO
Dim aExclude

Sub XLS()

aExclude = Array("x")
Set oFSO = CreateObject("Scripting.FilesystemObject")
deleteFiles oFSO.GetFolder(DIR)
Set oFSO = Nothing
End Sub


'=================================
Function isExclude(sPath)
    Dim s, bAns
    bAns = False
    For Each s In aExclude
        If InStr(1, sPath, s, vbTextCompare) = 1 Then
            bAns = True
            Exit For
        End If
    Next
    isExclude = bAns
End Function
'=================================
Function isOldFile(fFile)
    ' Old file if "MAX_AGE" months before today is greater than the file modification time
    isOldFile = (DateAdd("m", -MAX_AGE, Date) > fFile.DateLastModified)
End Function

这是我用代码得到的最远的,我缺少的是如何检查文件名是否超过2“_”,如果是这样的话&它超过3个月=删除。

提前致谢!干杯!

2 个答案:

答案 0 :(得分:1)

    Dim pathname As String = ""

    If fileNameCount("file_name") And DateDiff("m", NOW(), FileDateTime(pathname)) > 3 Then ' if '_' is more than 2 count and more than 3 months old, then delete
        ' if true delete file codes starts here
        ......
    End If

    Public Function fileNameCount(filename As String) As Boolean

        fileNameCount = False
        Dim count As Long
        Dim temp() As String

        temp = Split(filename, "_")

        count = UBound(temp, 1)

        If (count > 2) Then
            fileNameCount = True
        End If

    End Function

我已经为你编写了部分代码,方法fileNameCount将为'_'计数返回true / false,我使用DateDiff来获取文件月份的差异。因此,我正在检测这两个条件,如果两个语句都是真实条件,那么你应继续删除我没有写的文件代码。

您需要做的是

1)传入“file_name”参数,您需要考虑如何获取文件名
2)传递文件的正确路径名
3)编写删除文件的代码

无论如何,我没有测试代码,所以它可能有一些错误。希望这将有助于您尝试做的事情。

答案 1 :(得分:0)

要获取文件中"_"的数量,我会使用与此类似的内容:

Dim a
Dim c As Integer

a = Split("File_Name_Here", "_")
c = Ubound(a)

使用此功能,您知道如果文件名被拆分为3个或更多子字符串,则文件名中有2个"_"。至于文件的年龄,FileDateTime("FilePath")将为您提供创建日期或上次修改日期。