2012-02-24 213 views
1

我试图通过在表格中添加一个月来输入日期值(“Sheet1”)。单元格(17,3)。值是01/10/2011但格式为Oct-11。然后在表( “工作表Sheet”)返回。将细胞(17,4)。价值= LDate,展现NOV-11Excel VBA - 日期格式自动更改

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日),为什么它这样做,我该如何解决这个问题?

回答

1

小问题

Selection.NumberFormat = "mmm-yy" 

所以无论你离开光标这种格式放在您没有选择任何东西。

主要问题

你已经打了Excel漏洞,这将解释日期,如果它能够将数据传送到一个工作表中美国(中端)格式之中。 “2011年1月11日”将是“1月11日11日”给美国人,所以它是Excel。 “20/11/2011”不是有效的美国日期,所以Excel是“11月20日”。

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

我可以通过声明SDATE和LDate如日期解决您的问题:

Dim sdate As Date 
Dim Ldate As Date 
1

- >这表明01/10/2011当我在绳拉SDATE

我猜你的默认日期格式为“MM/DD/yyyy“,因此你正在解决这个问题。

在运行宏之前,右键单击图纸(“Sheet1”)。单元格(17,3)并单击格式。然后检查该单元格的格式。

EDIT

如果是则毫米/日/年的小区的值更改为10/01/2011,然后再次尝试该宏。

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"
0

而不是试图

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

试试这个

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