【问题标题】:Extract the date from filename into cell将文件名中的日期提取到单元格中
【发布时间】:2020-08-06 09:25:40
【问题描述】:

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

例如,下面的代码将根据文件名“CCONTACT_Daily_WIP_CCONTACTCase_20200805_0203.csv”的最新修改日期打开最新的 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)

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    你可以试试:

    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】:

      有不同的方法来解决这个问题。根据下划线拆分字符串已在其他答案中显示,因此让我向您展示如何继续使用固定字符串方法:

      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() 函数完成)由以下人员完成:

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

      【讨论】:

        【解决方案3】:

        请使用下一个功能:

        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
        

        【讨论】:

          猜你喜欢
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-11
          • 1970-01-01
          • 2018-07-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多