【问题标题】:Excel VBA - the date format changes automaticallyExcel VBA - 日期格式自动更改
【发布时间】:2012-03-14 15:13:07
【问题描述】:

我正在尝试通过在 Sheets("Sheet1").Cells(17, 3).Value 中的日期添加一个月来输入日期值,该日期为 01/10/2011,但格式为 Oct-11。然后在 Sheets("Sheet1").Cells(17, 4).Value = LDate 中返回,显示 Nov-11

sDate = Sheets("Sheet1").Cells(17, 3).Value   --> this shows 01/10/2011 when I hove over sDate
LDate = DateAdd("m", 1, sDate)                --> this shows 01/11/2011 when I hove over LDate

然后我想将该值 01/11/2011 输入到以下单元格中

Sheets("Sheet1").Cells(17, 4).Value = LDate
Selection.NumberFormat = "mmm-yy"

但在单元格中显示 11/01/2011(1 月 11 日),为什么会这样,我该如何解决这个问题?

【问题讨论】:

    标签: date excel vba


    【解决方案1】:

    小问题

    Selection.NumberFormat = "mmm-yy"
    

    您尚未选择任何内容,因此此格式将放置在您离开光标的任何位置。

    主要问题

    您遇到了 Excel 错误,当将数据传输到工作表时,它会将日期解释为美式(中端)格式。 “1/11/2011”对美国人来说是“11 Jan 11”,对 Excel 来说也是如此。 “20/11/2011”不是有效的美国日期,因此对于 Excel,它是“2011 年 11 月 20 日”。

    我可以通过将 sDate 和 LDate 声明为字符串来复制您的问题。 DateAdd 可以与字符串一起正常工作,因此 LDate 是正确的,但放在单元格中时会被误解。

    我可以通过将 sDate 和 LDate 声明为日期来解决您的问题:

    Dim sdate As Date
    Dim Ldate As Date
    

    【讨论】:

      【解决方案2】:
      Selection.NumberFormat = "mmm-yy"
      

      上面一行正在改变数字格式。实际上,当我执行您的步骤时,我遇到了同样的问题。

      但是数字格式正在做所有这些自动更改。

      例子:

      1. 在运行宏时,假设选定的单元格是(17,3)。

        • 运行宏前:单元格值为01/11/2012
        • 运行宏后:单元格值将更改/格式化为"Jan-12"。 (由于数字格式被应用为"mmm-yy",所以它认为01/11/2012被认为是Jan-12)
      2. 第二次,如果选择单元格(17,4)

        • 运行宏前:单元格值为2/11/2012
        • 运行宏后:单元格值将更改/格式化为"Feb-12"

      【讨论】:

        【解决方案3】:

        而不是尝试

        Cells(row2,col2) = Cells(row1,col1)
        

        试试这个

        Cells(row1,col1).Copy
        Cells(row2,col2).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-17
          • 2015-08-31
          • 1970-01-01
          相关资源
          最近更新 更多