Формат даты не работает в Excel VBA - PullRequest
0 голосов
/ 13 июня 2018

У меня проблемы с датой выбора даты.StartDate и EndDate являются значениями из DatePicker и Debug.Print даст мне «мм / дд / гггг».Я пытаюсь изменить формат даты на «дд / ммм / гггг», чтобы я мог сравнить его с моими данными из MS-доступа.Но это не работает.

Sub cmdSubmit_Click()
    Dim StartDate As Date, EndDate As Date

    StartDate = DTPickStart.Value    ' 6/11/2018
    EndDate = DTPickEnd.Value        ' 6/24/2018

    StartDate = Format(StartDate, "dd/mmm/yyyy")
    EndDate = Format(EndDate, "dd/mmm/yyyy")

    Debug.Print StartDate           ' gave me 6/11/2018 instead of 11/Jun/2018
    Debug.Print EndDate
End Sub

Любой совет, что я здесь не так делаю?

Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

Спасибо всем.Мне удалось выяснить это, но я отдаю свой голос на jainashish, так как он ближе к тому, как я могу использовать результат для запроса моего доступа к базе данных.

0 голосов
/ 13 июня 2018

Если вам нужно отформатировать дату в VBA, у вас есть 2 варианта:

  1. Изменить региональные настройки;
  2. Записать в Excel, отформатировать там и вывести .Text:

Option Explicit

Sub TestMe()

    Dim StartDate As Date

    StartDate = #6/11/2018#
    Cells(1, 1) = StartDate
    Cells(1, 1).NumberFormat = "DD/MMM/YYYY"
    Debug.Print Cells(1, 1).Text '11.Jun.2018

End Sub
0 голосов
/ 13 июня 2018

Согласно методу MSDN Application.International (Index) возвращает информацию о текущей стране / регионе и международных настройках.

При применении индекса как xlDateOrder

0 = month-day-year
1 = day-month-year
2 = year-month-day

Следовательно, мы будем использовать это свойство для переопределения поведения системы.Это особенно полезно, когда проект Excel-VBA используется в разных географических регионах с различными индивидуальными региональными настройками.

Ниже я переписываю ваш код с небольшими изменениями.Функция Format возвращает строку, но вы назначаете ее дате, которая вызывает эту проблему.

Sub cmdSubmit_Click()
    Dim StartDate As Date, EndDate As Date
    Dim strStartDate as String, strEndDate as String

    StartDate = DTPickStart.Value    ' 6/11/2018
    EndDate = DTPickEnd.Value        ' 6/24/2018

    strStartDate = Format(StartDate, "dd/mmm/yyyy")
    strEndDate = Format(EndDate, "dd/mmm/yyyy")

    Debug.Print StartDate           ' It will give 11/Jun/2018
    Debug.Print EndDate
End Sub
0 голосов
/ 13 июня 2018

Формат, вероятно, возвращает дату в нужном вам формате, но затем она преобразуется в значение даты, которое затем печатается в формате по умолчанию для вашей системы.Чтобы сохранить их в нужном формате, вы можете попробовать что-то вроде:

Option Explicit

Sub cmdSubmit_Click()
    Dim StartDate As Date, EndDate As Date
    Dim s1 As String, s2 As String

    StartDate = #6/11/2018#
    EndDate = #6/24/2018#

    'StartDate = Format(StartDate, "dd/mmm/yyyy")
    'EndDate = Format(EndDate, "dd/mmm/yyyy")

    s1 = Format(StartDate, "dd/mmm/yyyy")
    s2 = Format(EndDate, "dd/mmm/yyyy")

    Debug.Print StartDate & " - " & s1          ' gave me 6/11/2018 instead of 11/Jun/2018
    Debug.Print EndDate & " - " & s2
End Sub

В качестве альтернативы, если вы хотите, чтобы они были в ячейке как даты, вы можете установить NumberFormat диапазона, в который вы их записываете, чтобы быть в нужном вам формате:

Sheet1.Range("A1") = StartDate
Sheet1.Range("A2") = EndDate
Sheet1.Range("A1:A2").NumberFormat = "dd.mmm.yyyy"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...