Excel VBA - 日期格式自动更改

时间:2012-02-24 06:05:31

标签: date excel-vba vba excel

我试图通过在Sheets(“Sheet1”)中添加一个月来输入Date值。单元格(17,3).Value是01/10/2011但格式为Oct-11。然后返回Sheets(“Sheet1”)。单元格(17,4).Value = LDate,显示11月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日),为什么要这样做,我该如何解决这个问题呢?

3 个答案:

答案 0 :(得分:2)

次要问题

Selection.NumberFormat = "mmm-yy"

您尚未选择任何内容,因此无论您将光标放在何处,都会放置此格式。

主要问题

如果可以在将数据传输到工作表时将日期解释为美式(中端)格式,那么您已经遇到了Excel错误。 “1/11/2011”将是“1月11日11”给一个美国人,所以它是Excel。 “2011年11月11日”不是有效的美国日期,所以对Excel来说是“11月11日”。

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

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

Dim sdate As Date
Dim Ldate As Date

答案 1 :(得分:0)

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"

答案 2 :(得分:0)

而不是尝试

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

试试这个

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