VBA Excel - 将日期从一行复制到另一行更改日期格式

时间:2017-07-20 12:55:49

标签: excel vba excel-vba

我需要将一列中的日期复制到另一列。我以为我已经做得很好\但是有些日期会将格式更改为美国日期格式,而其他日期则按照我的目的保留英国格式。这是这个看起来像和我用来复制日期的代码,这些日期的列分别是ar 9和11。

DatesSample

Sub CopyPlannedDatesToHiddenColumn()

Dim wsCRC As Worksheet
Set wsCRC = Worksheets("CRC")
Dim lrowcrc As Long
lrowcrc = CRC.LastRowInCRC

Dim PlannedDateToCopy As String
Dim i As Integer

For i = 9 To lrowcrc

    PlannedDateToCopy = wsCRC.Cells(i, 9).Value
    wsCRC.Cells(i, 11) = PlannedDateToCopy

Next i

End Sub 

知道为什么会发生这种情况以及我如何能够这样做?

1 个答案:

答案 0 :(得分:2)

发生了什么事?

问题是您将PlannedDateToCopy声明为String类型。

以下一行

PlannedDateToCopy = wsCRC.Cells(i, 9).Value

将类型的值读取为Date类型,并将其自动转换为String变量。
然后,将String写入新单元格......

wsCRC.Cells(i, 11) = PlannedDateToCopy

这就是新单元格包含String而不是Date的原因。

解决方案1:删除变量

最短的解决方案是将值直接写入新单元格而不使用变量:

wsCRC.Cells(i, 11).Value = wsCRC.Cells(i, 9).Value

解决方案2:将其声明为正确类型

如果您明确需要该变量,则声明它......

  • ...作为Date,然后使用.Value

    Dim PlannedDateToCopy As Date
    PlannedDateToCopy = wsCRC.Cells(i, 9).Value
    
  • ...或Long并使用.Value2(请参阅Range.Value2 Property解释差异)

    Dim PlannedDateToCopy As Long
    PlannedDateToCopy = wsCRC.Cells(i, 9).Value2
    

喜欢 @Vinicius @Scott Craner 在评论中提出。

附加说明

除非您需要与旧API通信,否则您应该always use Long instead of Integer。特别是在处理行数时。 Excel有更多行(在较新版本中)而不是Integer可以处理的行:

Dim i As Long