【问题标题】:Why is Excel VBA changing the year of my date when I format it?为什么 Excel VBA 在我格式化时会更改日期的年份?
【发布时间】:2015-09-22 16:42:24
【问题描述】:

我正在尝试将日期变量格式化为 "mmm-yy,",但是当日期为 2016 年时,在格式化后,日期更改为 2015 年。这是我的代码:

(Result是一个输入框的字符串结果,该框要求用户以mmm-yy的形式输入日期,并且在这段代码之前有一个测试保证第四个字符有连字符。

其他验证测试发生在此代码之后,因为我发现字符串必须格式化为日期才能使测试正常工作。)

        result2 = result
        result2 = Format(result2, "mmm-yy")

有什么建议吗?

【问题讨论】:

  • 对于“sep-16”,16 假定为日,年份假定为未给出,因此假定为今年。所以日期是 2015 年 9 月 16 日。

标签: vba excel date formatting


【解决方案1】:

如果将输入框产生的值设置为等于日期类型变量的值,则让用户按照程序的理解输入日期(例如 mm/dd/yyyy)。

如果出于某种原因,用户必须以“mmm-yy”格式输入日期,请​​将输入设置为字符串变量的值,然后使用 [Month*] = Left([result] ,3) 和 [Year] = "20" & right([result],2)。然后,您必须构建日期,以便可以将其设置为 date 类型的新变量以放入您的 Format 函数中。

*当然,您必须有一些键才能将“Jan”、“Feb”、“Mar”等转换为值 01、02、03 等。

下面的测试对我来说是正确的:

Public Sub UserDateEntry()

Dim strUserEntry As String
Dim intMonth As Integer, intYear As Integer

strUserEntry = InputBox("Enter month & year in ""mmm-yy"" format.", "Date Entry", "Sep-16")

intMonth = Month(DateValue("01 " & Left(strUserEntry, 3) & " 2012"))
intYear = 20 & Right(strUserEntry, 2)

Application.Range("DateLoc").Value = Format(intMonth & " 01 " & intYear, "mm/dd/yyyy")

结束子

【讨论】:

  • 这个建议进一步成功地携带了代码,但没有在我的工作表上放置正确的日期。这是我在工作表中放置日期的代码部分: dateloc.Value = result2 (dateloc 是放置日期的范围)当我在运行这部分代码后将鼠标悬停在 result2 上时,它显示正确的日期,但是当它放在工作表中时,年份会发生变化(从 16 到 15)。建议?
  • 我真的不知道为什么你在输入 2016 时总是得到 2015。您将 InputBox 的用户输入结果设置为字符串类型的变量,对吗?您可以发布您的代码以便更清楚地理解吗?
  • 终于让它工作了——只是在放入工作表之前分解了日期的元素并在代码末尾连接成一个字符串——DateFinal = Mnth & "/" & dd & " /" & 年
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多