如何在 Excel 上手动插入日期时设置日期格式,而不更改区域设置?

如何在 Excel 上手动插入日期时设置日期格式,而不更改区域设置?

在我的语言环境中,日期以 dd/mm/yyyy 或其变体(包括 dd-mm-yy)的形式插入。我制作了一个 Excel 表单(在普通 Excel 文件中),已经格式化为以 dd/mm/yyyy 显示日期,但当我输入“05/04/2015”时,它将显示为“04/05/2015”。我知道可以通过将区域设置更改为我的本地设置来解决此问题,但我需要将此表单分发给许多不了解如何更改区域设置的人,并且假设没有人可以教我如何更改,因此我的问题:

有没有办法输入“05/04/2015”并被识别为“2015 年 4 月 5 日”,而无需更改区域设置?

补充说明:当我指的是“4 May 15”(输入 4/5/15)时,Excel 会将其识别为“5 April 15”,因为 Excel 将输入视为“mm/dd/yy”格式。 我需要将 Excel 的默认行为更改为“dd/mm/yyyy”因为这是用户输入的方式。

如果可能的话,该设置还应包含/嵌入在文件中,以允许最终用户无需更改设置即可使用表单。

我不熟悉宏和 VBA,但愿意尝试它们:)

编辑:这与我的问题有关: 如何在 MS-EXCEL 的公式栏中将日期格式从 dd-mm-yyyy 更改为 dd-mm-yy?

但我不需要更改整个公式栏,只要 Excel 识别出我以 dd/mm/yy 格式输入即可。

答案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

答案2

我完全明白你在说什么。我喜欢输入 YY-MM-DD。Excel 中没有将其更改为所需值的设置。你想要的设置在 Windows 中。它隐藏在控制面板“时间和语言”中的某个地方。

我必须进入高级设置“更改时间和日期格式”并更改“短日期”设置。

根据您使用的操作系统,说明可能会略有不同。

希望这可以帮助。

答案3

我认为你不能改变默认设置。当你从海外导入数据时,修复起来尤其麻烦。

我能想到的最不麻烦的方法是某种手动方式......


选项 1:我们可以接受文本格式并将它们放入单元格中,这样 Excel 就不会尝试将它们解释为日期。然后,在相邻的单元格中,我们可以将 DATE 函数与 LEFT、RIGHT 和 MID 一起使用。例如(指定用户必须以完整的 MM/DD/YYYY 输入日期):

单元格 A1:04/05/2015

单元格 B1: =DATE( RIGHT(A1,4), LEFT(A1,2), MID(A1,4,2) )


选项 2:要求用户在三个单独的单元格或字段中输入“日”、“月”和“年”,这可能会更好或更坏,具体取决于您的设置。

无论如何,祝你好运!

答案4

当我使用已有的相同格式为单元格分配新数据值时,我遇到了同样的问题

尽管目标单元格的格式相同,但 2018 年 2 月 12 日将交换为 2018 年 12 月 2 日。

使用 ..Range("B10").Value = DateValue(newdate) 确实解决了我的问题

相关内容