我需要将一列中的日期复制到另一列。我以为我已经做得很好\但是有些日期会将格式更改为美国日期格式,而其他日期则按照我的目的保留英国格式。这是这个看起来像和我用来复制日期的代码,这些日期的列分别是ar 9和11。
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
知道为什么会发生这种情况以及我如何能够这样做?
答案 0 :(得分:2)
问题是您将PlannedDateToCopy
声明为String
类型。
以下一行
PlannedDateToCopy = wsCRC.Cells(i, 9).Value
将类型的值读取为Date
类型,并将其自动转换为String
变量。
然后,将String
写入新单元格......
wsCRC.Cells(i, 11) = PlannedDateToCopy
这就是新单元格包含String
而不是Date
的原因。
最短的解决方案是将值直接写入新单元格而不使用变量:
wsCRC.Cells(i, 11).Value = wsCRC.Cells(i, 9).Value
如果您明确需要该变量,则声明它......
...作为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