Извлечь дату из имени файла в ячейку - PullRequest
0 голосов
/ 06 августа 2020

Я хотел бы извлечь дату из ежедневного имени файла, которое я использовал для открытия, используя приведенный ниже код. Формат файла, который я буду открывать каждый день, совпадает с форматом, за исключением того, что дата будет изменяться, чтобы отразить дату создания файла. Как написать в 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 голосов
/ 06 августа 2020

Вы можете попробовать:

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
0 голосов
/ 06 августа 2020

Есть разные способы решить эту проблему. Разделение строки на основе подчеркивания уже показано в других ответах, поэтому позвольте мне показать вам, как действовать, работая с подходом с фиксированной строкой:

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()): выполняется:

  • Начало с длины строки исправления (плюс один)
  • Длина определяется длиной формата
0 голосов
/ 06 августа 2020

Воспользуйтесь следующей функцией, пожалуйста:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...