3

В моей локали дата вставляется как дд / мм / гггг или вариации этого (включая дд-мм-гг). Я сделал форму Excel (в обычном файле Excel), уже отформатированную для отображения даты в виде дд / мм / гггг, но когда я набрал «05/04/2015», она будет отображаться как «04/05/2015». Я знаю, что это можно решить, изменив региональные настройки на мои локальные настройки, но мне нужно распространить эту форму среди большого количества людей, которые не знают, как изменить региональные условия, и при условии, что никто не может научить, как, отсюда мой вопрос:

Есть ли способ ввести «05/04/2015» и быть распознанным как "5 апреля 2015", без необходимости изменения региональных настроек?

Дополнительное примечание. Когда я имею в виду "4 мая 15" (напечатано 4/5/15), Excel распознает это как "5 апреля 15", потому что Excel принимает ввод в формате «мм / дд / гг». Мне нужно изменить поведение Excel по умолчанию, чтобы оно принималось как «дд / мм / гггг», так как именно так будут вводить пользователи.

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

Я не знаком с макросами и VBA, но готов попробовать их :)

РЕДАКТИРОВАТЬ: это связано с моим вопросом: Как изменить формат даты с дд-мм-гггг на дд-мм-гг в строке формул MS-EXCEL?

но мне не нужно менять всю строку формул, если Excel распознает, что я печатаю в формате дд / мм / гг.

6 ответов6

3

Я точно знаю, о чем ты говоришь. Мне нравится печатать YY-MM-DD. Настройка, чтобы изменить его на то, что вы хотите, не в Excel. Настройка, которую вы хотите, находится в Windows. Он спрятан где-то в панели управления "время и язык".

Мне пришлось перейти к расширенной настройке "Изменить формат времени и даты" и изменить настройку "Короткая дата".

В зависимости от того, какую операционную систему вы используете, направления могут немного отличаться.

Надеюсь это поможет.

1

Событие Worksheet_Change может по существу выполнить то, что вы просите, но вы должны быть уверены, что пользователь намерен что-то изменить. Я добавил в свое решение поле выбора 'Yes/No' чтобы предотвратить случайные изменения. Делать это без поля выбора рискованно, потому что если вы попытаетесь изменить существующее значение, оно вернется к исходному форматированию.

Этот код должен «жить» внутри кода VBA для листа, на котором вы хотите, чтобы он действовал:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim iDay, iMonth, iYear As Integer
Dim solutionRange As Range

'the cells you want the date to change for
Set solutionRange = Range("D4:D12")

'only triggers if the user's changing one cell
If Target.Count = 1 Then
    If (Not (Intersect(solutionRange, Target) Is Nothing) And (Target.Value > 0)) Then
        'disable application events so this change doesn't trigger itself
        Application.EnableEvents = False

        iDay = Left(Target.Value, 2)
        iMonth = Mid(Target.Value, 4, 2)
        iYear = Right(Target.Value, 4)

        ' Give the user a choice to say whether they need the date changed. You *can* remove both the 'If' and 'End If' if you really need to, but I'd strongly suggest keeping them.
        If (MsgBox("Have you entered your date in the format 'MM/DD/YYYY'?", vbYesNo) = vbYes) Then
            Target.Value = DateValue(iMonth & "/" & iDay & "/" & iYear)
        End If

        Application.EnableEvents = True
    End If
End If
End Sub
1

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

  1. Открытая панель управления
  2. Нажмите «Изменить клавиатуру и другой способ ввода» - появится окно «Язык и регион»
  3. Измените Короткую дату на мм / дд / гггг или по вашему желанию
  4. Измените Длинную Дату на ММММ-дд-гг или по вашему желанию
  5. Нажмите ОК
1

Я не думаю, что вы можете изменить по умолчанию. Особенно неудобно это исправлять, когда вы импортируете данные из-за рубежа.

Наименее грязные способы сделать это, я думаю, это какой-то ручной способ ...


Вариант 1. Мы можем принять входные данные в текстовом формате и поместить их в ячейки, чтобы Excel не пытался интерпретировать их как даты. Затем в соседней ячейке мы могли бы использовать функцию DATE вместе с LEFT, RIGHT и MID. Например (укажите, что пользователь должен ввести дату полностью в ММ / ДД / ГГГГ):

Ячейка А1: 05.05.2015

Ячейка B1: = ДАТА (ВПРАВО (A1,4), ВЛЕВО (A1,2), MID (A1,4,2))


Вариант 2. Запросите, чтобы пользователь вводил «день», «месяц» и «год» в три отдельные ячейки или поля, что может быть лучше или хуже в зависимости от вашей настройки.

Во всяком случае, удачи!

0

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

12-02-2018 будет отложено до 2 декабря 2018 года, хотя формат целевой ячейки был в том же формате.

С помощью ..Range("B10").Значение = DateValue(newdate) действительно решило мою проблему

0

Выделите нужный столбец, щелкните правой кнопкой мыши выбранный столбец, затем выберите Формат ячеек ... Выберите Custom и щелкните в поле с надписью General, введите «дд / мм / гггг». Это должно работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .