VBA Excel – 将date从一行复制到另一行更改date格式

我需要将一列中的date复制到另一列。 我以为我已经做好了正确的\然而有些date的格式转换为美国的date格式,而另一些仍然在我的目的所需的英国格式。 下面是这个样子和我用来复制date的代码,这些date列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 

任何想法,为什么发生这种情况,我怎么可以得到这个poast?

发生什么事?

问题在于,您将PlannedDateToCopy声明为Stringtypes。

以下行

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

Datetypes读取单元格的值,并将其自动转换为variables的String
然后,您将该String写入一个新的单元格…

 wsCRC.Cells(i, 11) = PlannedDateToCopy 

这就是为什么新的单元格包含一个String而不是一个Date


解决scheme1:删除variables

最短的解决scheme是直接将值写入新的单元格而不使用variables:

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

解决scheme2:声明它是正确的types

如果你明确需要这个variables,然后声明它…

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

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

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

@Vinicius @Scott Craner 在他们的评论中提出的build议。


附加说明

除非需要与旧API进行通信,否则应始终使用Long而不是Integer 。 特别是在处理行数时。 Excel有更多的行(在更新的版本)比Integer可以处理:

 Dim i As Long