我有一个电子表格,在三个序列中重复相同的行。例如,下面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发布于 2017-11-14 08:57:59
如果您在使用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知道在搜索单元格S3时要查看哪个Excel文件以及要查看哪个工作表(例如)。另外,我告诉VBA,我对那个单元格的.Value感兴趣,而不是.Value2或.Formula或其他任何东西。
让我知道以上这些是否有帮助。
https://stackoverflow.com/questions/47273924
复制相似问题