日期自动转换

时间:2015-05-31 18:28:45

标签: excel vba date

我有一张名为“02-05-2015”的表格。 我用

Dim sheetname As String
sheetname = ActiveSheet.Name
MsgBox (sheetname)

在msg框中显示02-05-2015。 但是,如果我使用

Range("K2").Value = sheetname

它显示05-02-2015。如果单元格格式更改为dd / mmm / yyyy,则显示2015年2月5日。为什么会出现此问题。我不知道。 即使我使用

Range("K2").Value = Format(sheetname,"dd/mm/yyyy")

不会发生任何变化。 我需要05/02/2015或05-02-2015在单元格中作为日期格式。

1 个答案:

答案 0 :(得分:0)

这是设计行为。当您将任何值放入单元格时,Excel会尽力弄清楚如何处理它。这包括将数字设为实际数字(在DUNS编号或带有前导零的零件编号的情况下并不总是需要)并尝试将看似日期的内容与系统的区域设置进行协调< em> mm / dd / yyyy 或 dd / mm / yyyy 02-05-2015 的问题在于它可能是 05-Feb-2015 02-May-2015 DMY MDY 的决定是在计算机的系统区域设置(位于“控制面板”中)中进行的。

根据您的描述,您希望Range(&#34; K2&#34;)保持代表 02-May-2015 的日期,而不是 05-Feb- 2015 。您的系统似乎也设置为 mm / dd / yyyy 的默认值。

这个三步例程可以为您提供所需的结果。

With Range("K2")
    .Value = Chr(39) & .Parent.Name
    .TextToColumns Destination:=Range("K2"), DataType:=xlFixedWidth, FieldInfo:=Array(0, 4)
    .NumberFormat = "mm-dd-yyyy"
End With

这将获取工作表名称并将其强制为K2,方法是将其强制为带有前缀单引号的文本值(例如' tick )。然后,它使用Text-to-Columns命令将其解释为 DMY 日期,并将其存储为当前系统区域设置中的日期。最后,它应用一些单元格格式来获得所需的单元格显示值。