VBA:使用DateAdd函数

VBA:使用DateAdd函数,vba,excel,Vba,Excel,我有一个电子表格,有三行一行的重复。例如,下面的A表示一行信息。S列中是日期。我想将每个序列第二行S列中的日期更改为原始日期后一个月,将每个序列第三行中的日期更改为原始日期后两个月,并使用循环和DateAdd功能对整个电子表格继续此操作 下面是我现在拥有的代码,但是我在DateAdd函数上遇到编译错误(这是我第一次使用它): 如果您在使用DataAdd功能时遇到困难,可以这样绕过它: Option Explicit Sub DateChange() Dim r As Long Dim dtt

我有一个电子表格,有三行一行的重复。例如,下面的A表示一行信息。S列中是日期。我想将每个序列第二行S列中的日期更改为原始日期后一个月,将每个序列第三行中的日期更改为原始日期后两个月,并使用循环和
DateAdd
功能对整个电子表格继续此操作

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


如果您在使用
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
请注意,我还完全限定了所有引用(为了良好的编码实践和避免错误)。这意味着我指的是
本工作簿。工作表(“Sheet1”)。单元格(r,“S”)。值
,而不仅仅是
单元格(r,“S”)
(如您所述)。像这样,VBA知道在搜索单元格
S3
(例如)时要查看哪个Excel文件以及要查看哪个工作表。另外,我告诉VBA我对该单元格的
.Value
感兴趣,而不是
.Value2
.Formula
或任何其他内容


请告诉我以上是否有帮助。

如果您在使用
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
请注意,我还完全限定了所有引用(为了良好的编码实践和避免错误)。这意味着我指的是
本工作簿。工作表(“Sheet1”)。单元格(r,“S”)。值
,而不仅仅是
单元格(r,“S”)
(如您所述)。像这样,VBA知道在搜索单元格
S3
(例如)时要查看哪个Excel文件以及要查看哪个工作表。另外,我告诉VBA我对该单元格的
.Value
感兴趣,而不是
.Value2
.Formula
或任何其他内容


请告诉我上述操作是否有帮助。

您遇到的具体错误是什么?最常见的问题是,如果activesheet上的
单元格(r,“s”)
不是有效日期(因为您没有使用完全限定名),您将收到错误。添加之前,请使用IsDate检查。我们现在所能做的就是猜测。Mat的马克杯错误是“编译错误:参数数目错误或属性分配无效”。这实际上是一个约会。你将如何对cyboashu这个名字进行限定?谢谢,这对我有用。哪一行是错误?这一行,在调试DateAdd函数时突出显示:单元格(r+1,“S”)。Value=DateAdd(“m”,1,单元格(r,“S”))您得到的具体错误是什么?最常见的问题是,如果activesheet上的
Cells(r,“S”)
不是有效的日期(因为您没有使用完全限定的名称),您将得到错误。添加之前,请使用IsDate检查。我们现在所能做的就是猜测。Mat的马克杯错误是“编译错误:参数数目错误或属性分配无效”。这实际上是一个约会。你将如何对cyboashu这个名字进行限定?谢谢,这对我有用。哪一行是错误?这一行,调试DateAdd函数时突出显示:单元格(r+1,“S”)。Value=DateAdd(“m”,1,单元格(r,“S”))非常感谢!在运行代码时,我得到了一个错误13,这一行的类型不匹配:dttTemp=ws.Cells(r,“S”).ValueThis非常有效。我意识到我需要去掉第一行的标题。我真的很感激你的辛勤工作,非常感谢!在运行代码时,我得到了一个错误13,这一行的类型不匹配:dttTemp=ws.Cells(r,“S”).ValueThis非常有效。我意识到我需要去掉第一行的标题。我真的很感激你的辛勤工作