从文件名中提取日期到单元格

时间:2020-08-06 09:25:40

标签: excel vba

我想使用以下代码从我以前打开的每日文件名中提取日期。我将每天打开的文件格式是相同的格式,只是日期会更改以反映生成文件的日期。如何用VBA编写以在我打开的最新文件中提取日期,然后粘贴到文件中的“ A2”单元格中?

例如,下面的代码将基于最新的修改日期打开最新的csv文件,其文件名为“ CCONTACT_Daily_WIP_CCONTACTCase_20200805_0203.csv”。我只想从打开的文件名中提取日期“ 20200805”。文件名始终相同,只是日期会更改。如何提取日期并将其粘贴到单元格中?

Dim MyPathWIP As String

Dim MyFileWIP As String

Dim LatestFileWIP As String

Dim LatestDateWIP As Date

Dim LMDWIP As Date

Dim wip1 As Excel.Workbook

'Open latest file from WIP folder

MyPathWIP = "D:\Regina\Case360 reporting automation\Daily Report WIP Testing\"

If Right(MyPathWIP, 1) <> "\" Then MyPathWIP = MyPathWIP & "\"

MyFileWIP = Dir(MyPathWIP & "*.csv", vbNormal)

If Len(MyFileWIP) = 0 Then
        MsgBox "No files were found...", vbExclamation
        Exit Sub
    End If

Do While Len(MyFileWIP) > 0
    LMDWIP = FileDateTime(MyPathWIP & MyFileWIP)
    If LMDWIP > LatestDateWIP Then
        LatestFileWIP = MyFileWIP
        LatestDateWIP = LMDWIP
    End If

    MyFileWIP = Dir

Loop

Set wip1 = Workbooks.Open(MyPathWIP & LatestFileWIP)

3 个答案:

答案 0 :(得分:0)

请使用下一个功能:

Function FindDate(strFileName As String) As String
  If UBound(Split(strFileName, "_")) > 4 Then
      FindDate = Split(strFileName, "_")(4)
  End If
End Function

您可以使用以下方法进行测试:

Sub testFindDate()
  Dim fileName As String
   fileName = "CCONTACT_Daily_WIP_CCONTACTCase_20200805_0203.csv"
   MsgBox FindDate(fileName)
End Sub

答案 1 :(得分:0)

您可以尝试:

Sub Macro1()

    Dim str As String
    Dim arr As Variant
    
    str = "CCONTACT_Daily_WIP_CCONTACTCase_20200805_0203.csv"
    
    arr = Split(str, "_")
    
    MsgBox (arr(4))
    
End Sub

答案 2 :(得分:0)

有多种解决方法。在其他答案中已经显示了基于下划线的字符串拆分,因此,让我向您展示如何使用固定字符串方法进行操作:

str_filename = "CCONTACT_Daily_WIP_CCONTACTCase_20200805_0203.csv"
str_Date = Mid(str_filename,Len("CCONTACT_Daily_WIP_CCONTACTCase_")+1,Len("YYYYMMDD"))

这是什么意思?

文件名具有以下格式:

CCONTACT_Daily_WIP_CCONTACTCase_YYYYMMDD_...

位置:

  • CCONTACT_Daily_WIP_CCONTACTCase_是一个修复字符串,在您要查找的字符串之前
  • YYYYMMDD是日期格式(年份为四个字符,月份为两个字符,日期为两个字符)

提取(通过Mid()函数获取子字符串)是通过以下方式完成的:

  • 从修复字符串的长度(加一)开始
  • 长度由格式的长度定义