Excel VBA-在动态文件名中删除日期

时间:2015-04-17 11:50:05

标签: excel vba excel-vba

我是VBA的业余爱好者。

我的目标是使用我设法实现的多个文件压缩文件夹。但我需要格式化文件名。

文件夹中的某些文件可能包含日期作为文件名的前缀或后缀(例如:ddmmyyyyexpense.xlsxexpenseddmmyyyy.txt)。

我想从文件名中删除日期。

注意:我可以使用任何文件类型

  

的.xls
     .XLSX
     的.csv
     .TXT

我尝试使用附加到其中一个字符串的通配符 VBtextcompare但它没有用。

1 个答案:

答案 0 :(得分:0)

因为我喜欢RegExp,我会:)

此代码查找八位数字,测试这是否为有效日期,如果是,则删除它。

如果您有多个可能的日期,或者8位数字被其他数字包围,则需要进行精炼。

下面的代码将三个示例字符串提供给清理功能,它从第一个和第三个中删除日期,然后按原样保留第二个。

Sub TestDate()
Debug.Print CleanStr("01142012expense.xlsx")
Debug.Print CleanStr("421142012expense.xlsx")
Debug.Print CleanStr("expense16042015.xlsx")
End Sub

Function CleanStr(strIn As String) As String
Dim objRegex As Object
Dim objRegMC As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
    .Pattern = "(\d{2})(\d{2})(\d{4})"
    If .test(strIn) Then
        Set objRegMC = .Execute(strIn)
        If IsDate(objRegMC(0).submatches(0) & "/" & objRegMC(0).submatches(1) & "/" & objRegMC(0).submatches(2)) Then
            CleanStr = .Replace(strIn, vbNullString)
        Else
            CleanStr = strIn
        End If
    End If
End With
End Function