Получение правильной даты с использованием VBA - PullRequest
0 голосов
/ 11 мая 2018

01/02/2018 12:25:00

У меня есть вышеуказанная дата, которая находится в ячейке B1 таблицы Excel. Дата 01 февраля 2018 года, но код VBA ниже

thedate = CDate(Application.Cells(linecount, 2))

преобразует это в 02 января 2018

Какой код VBA я использую, чтобы он оставался 01 февраля 2018 года?

1 Ответ

0 голосов
/ 11 мая 2018

Если вы хотите использовать VBA для возврата Date значения типа данных строки 01/02/2018 12:25:00 PM, представляющего 01 February 2018 в ваших локальных региональных настройках даты (в окне сообщения), вы можете использовать:

Dim dt as String
dt = "01/02/2018 12:25:00 PM"
MsgBox DateSerial(Mid(dt, 7, 4), Mid(dt, 4, 2), Left(dt, 2))

img Вот как это отображается для me . См. Примечание ниже.

Если вы действительно хотите, чтобы строка (в окне сообщений) возвращалась в указанном вами формате, "dd MMMM yyyy", вы можете использовать:

Dim dt as String
dt = "01/02/2018 12:25:00 PM"
MsgBox Format(DateSerial(Mid(dt, 7, 4), Mid(dt, 4, 2), Left(dt, 2)), "dd MMMM yyyy")

img

Если вы хотите сохранить эти данные (включая время) или использовать их для вычислений, то правильный способ сделать это будет более как:

Dim strMyDate as String, dtMyDate as Date
strMyDate = "01/02/2018 12:25:00 PM"
dtMyDate = DateSerial(Mid(strMyDate, 7, 4), Mid(strMyDate, 4, 2), _
    Left(strMyDate, 2)) + TimeValue(Mid(strMyDate, 11))
MsgBox dtMyDate

img


Обратите внимание, что эти MsgBox отображают дату / время на основе настроек Windows моей системы (показанных ниже), показанных здесь, где их можно настроить если необходимо. (Следовательно, приведенные выше результаты будут выглядеть для вас иначе.)

  • Откройте эти настройки, нажав Windows Key, наберите region и нажмите ᴇɴᴛᴇʀ .

    (Нажмите, чтобы увеличить)
    image

  • DateTime на самом деле хранится в Excel как число, где 0 = December 30, 1899 и +1 = +1 day, поэтому пример даты 01 February 2018 12:25:00 PM на самом деле является только форматированным представлением серийного номера DateTime, в в этом случае 43132.5173611.


Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...