Прекратить изменение значения даты в VBA - PullRequest
0 голосов
/ 13 ноября 2018

Excel постоянно меняет мою дату на американский формат. У меня есть пользовательская форма, где пользователь вводит дату. В качестве примера я ввожу 01/11/2018 (1 ноября 2018 года). Затем я помещаю это значение в ячейку, однако оно автоматически меняется на 11/01/2018 или 11 января 2018 года.

До сих пор я пытался использовать следующий код, чтобы заставить его использовать британский формат;

SHT_data_TASKS.Cells(1 + tableRows, 8).NumberFormat = "dd/mm/yyyy;@"
SHT_data_TASKS.Cells(1 + tableRows, 8) = form_addTask_Date.Value

Но это не помогает. Я также пытался использовать функцию CDate, но все еще не повезло. Я проверил региональные настройки своего компьютера, и они все верны для Великобритании.

Если я щелкну правой кнопкой мыши по ячейке, в которой находится дата, и выберу формат, он будет показан как уже отформатированный в Великобритании! Я не уверен, что заставляет это измениться.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Когда вы собираетесь записать свою дату на лист:

  1. Убедитесь, что она сохраняется как дата (или эквивалент даты) с помощью isdate()
  2. Назначьте еечерез Range.FormulaLocal вместо value или value2.

Не проверено, но т. е.

Range("A1").FormulaLocal = #10/31/2018#
0 голосов
/ 13 ноября 2018

Это код даты, который я использую на контроле, содержащий даты в Великобритании:

Private Sub UserForm_Initialize()
    Me.txtDate = Format(Date, "dd-mmm-yyyy")
End Sub  

В событии AfterUpdate для управления датой:

Private Sub txtDate_AfterUpdate()
    With Me
        FormatDate .txtDate
    End With
End Sub  

В обычном модуле:

Public Sub FormatDate(ctrl As Control)

    Dim dDate As Date
    Dim IsDate As Boolean

    If Replace(ctrl.Value, " ", "") <> "" Then
        On Error Resume Next
            dDate = CDate(ctrl.Value)
            IsDate = (Err.Number = 0)
            Err.Clear
        On Error GoTo 0

        If IsDate Then
            ctrl.Value = Format(ctrl.Value, "dd-mmm-yyyy")
            ctrl.BackColor = RGB(255, 255, 255)
        Else
            ctrl.BackColor = RGB(255, 0, 0)
        End If
    End If

End Sub  

Затем я переношу его на лист (на кнопку «Сохранить»), используя следующий код:

shtRawData.Cells(rLastCell.Row, CLng(lCol)) = CDate(ctrl.Value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...