VBA:使用DateAdd函数

时间:2017-11-13 21:33:37

标签: excel vba excel-vba

我有一个相同行的电子表格,以三个序列重复。例如,下面的A代表一行信息。在S列中是日期。我想将每个序列第二行中S列的日期更改为原始日期后的一个月和每个序列的第三行到原始日期后的两个月,并使用整个电子表格的整个电子表格继续循环和DateAdd函数。

这是我现在的代码,但我在DateAdd函数上遇到编译错误(这是我第一次使用它):

Sub DateChange()

Dim r As Long

Application.ScreenUpdating = False

For r = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    With Cells(r, 1).EntireRow
        .Copy
        .Resize(2).Offset(1, 0).Insert Shift:=xlDown
    End With
    Cells(r + 1, "S").Value = DateAdd("m", 1, Cells(r, "S"))
    Cells(r + 2, "S").Value = DateAdd("m", 2, Cells(r, "S"))
Next r

Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

如果您在使用DataAdd功能时遇到困难,可以像这样绕过它:

Option Explicit

Sub DateChange()

Dim r As Long
Dim dttTemp As Date
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Sheet1")

Application.ScreenUpdating = False

For r = ws.Range("A" & ws.Rows.Count).End(xlUp).Row To 1 Step -1
    With ws.Cells(r, 1).EntireRow
        .Copy
        .Resize(2).Offset(1, 0).Insert Shift:=xlDown
    End With
    dttTemp = ws.Cells(r, "S").Value
    ws.Cells(r + 1, "S").Value = DateSerial(Year(dttTemp), Month(dttTemp) + 1, Day(dttTemp))
    ws.Cells(r + 2, "S").Value = DateSerial(Year(dttTemp), Month(dttTemp) + 2, Day(dttTemp))
Next r

Application.ScreenUpdating = True

End Sub

请注意,我也完全符合所有参考资料(用于良好的编码实践并避免错误)。这意味着我指的是ThisWorkbook.Worksheets("Sheet1").Cells(r, "S").Value,而不仅仅是Cells(r, "S")(正如您所做的那样)。像这样,VBA知道要查找哪个Excel文件以及在搜索单元格S3时要查看的工作表(例如)。另外,我告诉VBA我对该单元格.Value而不是.Value2.Formula或其他任何内容感兴趣。

如果上述情况有所帮助,请告诉我。