Как я могу получить метку времени в формате «гггг / мм / дд чч: мм: сс.ффф» в VBA? - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу получить этот вывод:

2018-09-02 00:00:00.000

Я попробовал следующий код:

.Cells(LRS + 1, 15).Value = Format(.Cells(LRS + 1, "A").Value, "yyyy-MM-dd hh:mm:ss.fff")

И я получил:

2018-09-02 00:00:00.fff

Начальная датав Excel имеет следующий формат yyyy/mm/dd, без учета времени.Вот почему временная часть включает только нули 00:00:00.000.Причина, по которой я хочу включить время в конкретный формат, заключается в том, что я планирую импортировать эти даты в таблицу SQL с этим форматом.

Есть ли какое-либо решение?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

После замены формата ячейки соответствующим форматом вполне вероятно, что значение ячейки будет импортировано как текст, а не как значение.

Sub test()
    Dim s As String, s1 As String, s2 As String
    'First Cell format as your "yyyy-mm-dd hh:mm:ss.000"
    Range("a2").NumberFormatLocal = "yyyy-mm-dd hh:mm:ss.000"

    'In vb,This format("yyyy-mm-dd hh:mm:ss.000") is not recognized. 
    Range("b2") = Format(Range("a2"), "yyyy-mm-dd hh:mm:ss.000")
    s1 = Format(Range("a2"), "yyyy-mm-dd hh:mm:ss.000")
    's1 = "2018-09-03 01:24:33.000"

    'Since you format a2 cell as "yyyy-mm-dd hh:mm:ss.000" you can get data as text
    Range("b2") = Range("a2").Text
    s2 = Range("a2").Text
    's2= "2018-09-03 01:24:33.240"
End Sub

Данные листа

enter image description here

Локальное окно

enter image description here

0 голосов
/ 13 декабря 2018

Как видно из документации fff не распознается как токен форматирования в VBA.

В действительности вы можете импортировать данные в SQL без форматирования, чтобы добавитьвремя.Если вы импортируете его в поле datetime, механизм SQL по умолчанию автоматически установит для части времени поля значение полуночи в день, когда вы его указали.

Я думаю, что вы можете просто изменить строку формата на yyyy-MM-dd.

Однако, если вы действительно хотите сделать это так, то, поскольку времени не указано, просто жестко закодируйте000 вместо fff.Остальное время может быть аналогично жестко запрограммировано, поскольку оно никогда не меняется, поэтому в итоге вы получите yyyy-MM-dd 00:00:00.000.Но, как я уже сказал, я думаю, что это немного бессмысленно.

...