Принудительное использование Cdate в VBA Excel при извлечении метаданных

#excel #vba #metadata

Вопрос:

У меня есть этот код, который успешно возвращает 0-5 элементов метаданных. Однако даты возвращаются в смешанном формате США и Великобритании… Мне нужно применить Cdate или что-то подобное, чтобы все даты считывались как дата Великобритании. (ДД/ММ/ГГ) Я обычно использовал Cdate для других целей, но не уверен, как заставить его работать….

Код:

 Dim sFile As Object, obja  'Create Shell Object amp; NameSpace Set oShell = CreateObject("Shell.Application") Set oDir = oShell.Namespace("FILEPATH") ActiveSheet.Cells.ClearContents  'Loop thru each File/Folder inside Root Directory iRow = 1  For Each sFile In oDir.Items  iRow = iRow   1    'Loop thru Each Property  For i = 0 To 5    'Get File Property Name amp; Value  obja = oDir.GetDetailsOf(sFile, i)  If obja lt;gt; "" Then  iRow = iRow   1  'Enter File Property to Sheet  ActiveSheet.Range("A" amp; iRow) = oDir.GetDetailsOf(oDir, i)  ActiveSheet.Range("B" amp; iRow) = obja  End If  Next Next  MsgBox "Process Completed"   End Sub  

Комментарии:

1. В вашем коде нет CDate? Можете ли вы объяснить, что вы пытаетесь сделать или в чем заключается ваш вопрос? Может быть, несколько примеров помогут.

2. @RBarryYoung Я называю Cdate чем-то, что я использовал в прошлом. Я не уверен, что использовать, чтобы заставить приведенный выше код сохранять даты из метаданных в электронную таблицу

3. Неясно, в чем здесь проблема. Я думаю, что если бы вы могли предоставить некоторые примеры данных и какие результаты вы хотите/нуждаетесь в них, это могло бы прояснить ситуацию.

4. Приведенный выше код смешивает форматы дат США и Великобритании. Мне нужны только форматы дат в Великобритании

5. Опять же, если бы вы могли привести пример различных входных данных, какие выходные данные вы получаете в настоящее время и что вы хотите получить в качестве выходных данных, это очень помогло бы. Это просто таблица, состоящая, скажем, из 3-5 входных значений с тремя столбцами ( вход, текущий выход, ожидаемый выход). Не беспокойтесь о форматировании таблицы, просто дайте нам данные, и мы сможем отформатировать их в вашем сообщении.

Ответ №1:

Для свойств даты разделите строку на день,месяц,год,час,минуту, а затем воссоздайте дату с DateSerial() помощью и TimeSerial() .

 Option Explicit  Sub files()   Dim sFile As Object, obja, oShell, oDir  Dim iRow As Long, i As Long  Dim sValue, sName As String  Dim arDT, arDMY, arHMS, dt As Date    'Create Shell Object amp; NameSpace  Set oShell = CreateObject("Shell.Application")  Set oDir = oShell.Namespace("C:tempsodata")  ActiveSheet.Cells.ClearContents    'Loop thru each File/Folder inside Root Directory  iRow = 1    For Each sFile In oDir.Items  iRow = iRow   1    'Loop thru Each Property  For i = 0 To 5  sName = oDir.GetDetailsOf(oDir, i)  sValue = oDir.GetDetailsOf(sFile, i)    If sValue lt;gt; "" Then  iRow = iRow   1  Range("A" amp; iRow) = sName  If sName Like "Date*" Then  ' sValue is dd/mm/yyyy hh:mm  arDT = Split(sValue, " ")  arDMY = Split(arDT(0), "/")  arHMS = Split(arDT(1), ":")    dt = DateSerial(arDMY(2), arDMY(1), arDMY(0)) _    TimeSerial(arHMS(0), arHMS(1), 0)  Range("B" amp; iRow).NumberFormat = "dd/mm/yy hh:mm"  Range("B" amp; iRow) = dt  Else  Range("B" amp; iRow) = sValue  End If    End If  Next  Next    MsgBox "Process Completed"  End Sub  

Комментарии:

1. Это прекрасно работает. Спасибо. Рекомендую эту дату соблюдать… Извините, если я вызвал путаницу, сказав о CDate. Я думал, что это нормально, но, возможно, это грубый способ объяснить проблему.