首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA:使用DateAdd函数

VBA:使用DateAdd函数
EN

Stack Overflow用户
提问于 2017-11-13 21:33:36
回答 1查看 962关注 0票数 1

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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 08:57:59

如果您在使用DataAdd函数时遇到困难,那么您可以像这样绕过它:

代码语言:javascript
复制
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或其他任何东西。

让我知道以上这些是否有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47273924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档