VBA Excel – 将date从一行复制到另一行更改date格式
我需要将一列中的date复制到另一列。 我以为我已经做好了正确的\然而有些date的格式转换为美国的date格式,而另一些仍然在我的目的所需的英国格式。 下面是这个样子和我用来复制date的代码,这些date列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
任何想法,为什么发生这种情况,我怎么可以得到这个poast?
发生什么事?
问题在于,您将PlannedDateToCopy
声明为String
types。
以下行
PlannedDateToCopy = wsCRC.Cells(i, 9).Value
以Date
types读取单元格的值,并将其自动转换为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