#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. Я думал, что это нормально, но, возможно, это грубый способ объяснить проблему.