Excel VBA-删除动态文件名中的日期
我是VBA的业余爱好者 我的目标是压缩文件夹与多个文件,我已经设法实现。但是我需要格式化文件名 文件夹中的某些文件可能包含日期作为文件名的前缀或后缀(例如:Excel VBA-删除动态文件名中的日期,vba,excel,Vba,Excel,我是VBA的业余爱好者 我的目标是压缩文件夹与多个文件,我已经设法实现。但是我需要格式化文件名 文件夹中的某些文件可能包含日期作为文件名的前缀或后缀(例如:ddmmyyyyexpense.xlsx或expenseddmyyyy.txt) 我想从文件名中删除日期 注意:我可以有任何文件类型 .xls .xlsx .csv .txt 我尝试在其中一个字符串后面添加通配符,然后 VBtextcompare但它不起作用。因为我喜欢RegExp,所以我会:) 此代码查找八位数字,测试这是否是有效日期,如果
ddmmyyyyexpense.xlsx
或expenseddmyyyy.txt
)
我想从文件名中删除日期
注意:我可以有任何文件类型
.xls.xlsx
.csv
.txt 我尝试在其中一个字符串后面添加通配符,然后
VBtextcompare
但它不起作用。因为我喜欢RegExp,所以我会:)
此代码查找八位数字,测试这是否是有效日期,如果是,则将其删除
如果您有多个可能的日期,或者如果8位数字被其他数字包围,则需要细化
下面的代码将三个示例字符串提供给cleaning函数,它从第一个和第三个字符串中去掉日期,第二个字符串保持原样
Sub TestDate()
Debug.Print CleanStr("01142012expense.xlsx")
Debug.Print CleanStr("421142012expense.xlsx")
Debug.Print CleanStr("expense16042015.xlsx")
End Sub
代码
到目前为止你试过了吗?我只试过拉拉链,但效果很好。我试着比较一下,但没有效果。我不知道该使用什么,也不知道有什么内置函数可以帮助我me@brettdjVBtextcompare不起作用。我甚至尝试在其中一个字符串后面添加通配符。还是不行。请帮我一下,我相信这会奏效的。我现在就试试。不管怎样,如果代码中有2015年4月17日这样的字符串怎么办?我想很好地处理这种情况。当你给出答案时,至少我会尝试复制这个..:)。不要说话。太神了我几个小时的思考过程你很快就完成了。我很好奇。谢谢你,非常感谢。天才!!我没有测试它,但它可能有效。我只想知道你为什么把它分成三部分。由于整个日期都应该删除,所以您最好将模式定义为“\d{8}”,这也会使If语句更容易。除非你想确定它是一个日期,但在这种情况下,正则表达式会非常复杂。@MichaëlBenjaminSaerens这就是为什么我将它分成三部分,用一个简单的ISDATE来测试有效日期(而不是一个复杂的正则表达式)。@brettdj不知为什么我忽略了If语句的这一部分。我的任命。
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