【问题标题】:Excel VBA - Unable to change year in date format in TextBox in UserformExcel VBA - 无法在用户窗体的文本框中更改日期格式的年份
【发布时间】:2017-06-02 21:26:14
【问题描述】:

我有一个用户表单,其中包含两个用于日期的 TextBox 字段。当我填写文本框并按“制表符”或单击另一个框时,该字段将首先填写工作表上的一个单元格,然后在文本框中格式化日期(这允许以不同格式输入日期,例如 1/ 1/17,不管它应该返回为 mmm dd, yyyy)。

这是我的问题。一切都完美无缺,但年份总是停留在 2017 年。我尝试以所有格式输入日期,月份和日期会相应更改,但年份仍然是 2017 年。

下面是代码:

Private Sub Button_OK_Click()

Sheets("Inputs").Range("C18").Value = Format(TextBox_StartDate.Value, "mmm dd, yyyy")
TextBox_StartDate.Value = Format(Sheets("Inputs").Range("C18").Text, "mmm dd, yyyy")
Sheets("Inputs").Range("C19").Value = Format(TextBox_EndDate.Value, "mmm dd, yyyy")
TextBox_EndDate.Value = Format(Sheets("Inputs").Range("C19").Text, "mmm dd, yyyy")
If TextBox_StartDate.Value = "" Or TextBox_EndDate.Value = "" Then
    MsgBox ("Start and End Dates must be filled in to continue.")
ElseIf Sheets("Inputs").Range("C18").Value > Sheets("Inputs").Range("C19").Value Then
    MsgBox ("End Date must be after Start Date.")
ElseIf Not (IsNumeric(Sheets("Inputs").Range("C18").Value) And IsNumeric(Sheets("Inputs").Range("C18").Value)) Then
    MsgBox ("Date fields must be filled in properly.")
Else
    Continue = True
    Unload Me
End If
End Sub

Private Sub TextBox_StartDate_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 9 Then
    Sheets("Inputs").Range("C18").Value = Format(TextBox_StartDate.Value, "mmm dd, yyyy")
     TextBox_StartDate.Value = Format(Sheets("Inputs").Range("C18").Text, "mmm dd, yyyy")
    Sheets("Inputs").Range("C19").Value = Format(TextBox_EndDate.Value, "mmm dd, yyyy")
     TextBox_EndDate.Value = Format(Sheets("Inputs").Range("C19").Text, "mmm dd, yyyy")
End If
End Sub

任何帮助将不胜感激!

【问题讨论】:

  • 我复制了您的代码,但没有收到您的错误。它的行为就像我认为你会喜欢的那样。我使用瑞典语言环境运行 Excel 2016。
  • 我没有收到错误。我的问题是,当日期自动填充到文本框中时,无论我输入哪一年,它总是填写为 2017 年。
  • 您的代码对我有用。例如。如果我在TextBox_StartDate 中输入“5/6/15”,它会正确地将其转换为“2015 年 6 月 5 日”。我不喜欢您这样做的方式(我更愿意将日期视为日期,而不是将它们转换为文本,然后再返回日期,以便将它们转换为文本再次),但它似乎工作。
  • 你可能填错了单元格?在即时窗口(alt g)中尝试,并使用“debug.print format(....)”

标签: vba excel date


【解决方案1】:
Sheets("Inputs").Range("C18").Value = Format(DateValue(TextBox_StartDate.Value), "mmm dd, yyyy")

【讨论】:

  • 您应该提供更多细节以将您的代码上下文化并解释它如何回答问题。见How to Answer
  • 格式化值后,您的值更改为文本值(字符串)。为了重用,您必须通过 datevalue() 函数将文本值更改为 datevalue。
【解决方案2】:

我发现了问题所在。单元格 C18 和 C19 被格式化为 dd-mmm。为了使代码正常工作,格式中必须包含年份值。将单元格 C18 和 C19 中的格式更改为 dd-mmm-yy 或 mmm dd, yyyy 解决了我的问题。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多