我有一个相同行的电子表格,以三个序列重复。例如,下面的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
答案 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
或其他任何内容感兴趣。
如果上述情况有所帮助,请告诉我。