excel VBA:将日期从电子表格转换为while/do

excel VBA:将日期从电子表格转换为while/do,vba,date,loops,excel,Vba,Date,Loops,Excel,我试图编写一个宏,插入重复的行(列中指定的行数),同时更改每个重复行的提前日期。 差不多 BEFORE AFTER 20/01/2013 2 20/01/2013 2 28/02/2013 0 21/01/2013 2 15/03/2013 1

我试图编写一个宏,插入重复的行(列中指定的行数),同时更改每个重复行的提前日期。 差不多

BEFORE                                     AFTER
20/01/2013   2                             20/01/2013   2       
28/02/2013   0                             21/01/2013   2
15/03/2013   1                             22/01/2013   2
                                           28/02/2013   0
                                           15/03/2013   1
                                           16/03/2013   1
重复的部分工作得很好,但是日期的改变让我头疼。我试过了

Cells(x,y).Value = Cells(x,y).Value + 1
但它与日期无关

Dateadd也没有带我去任何地方。。。 密码来了…谢谢你能帮助我的人

Sub Macro2()
'
' Macro2 Macro
' ola
'

Dim i As Integer
Dim x As Integer
Dim y As Integer
Dim k As Integer
Dim z As Integer


    i = 2
    x = Application.InputBox("Number of Rows", "Number of Rows", Type:=1)
    k = Application.InputBox("Column", "Choose 1 for A, 2 for B, 5 for E...", Type:=1)


Do
    y = Cells(i, k).Value
    If y = 0 Then
    i = (i + 1)
    Cells(i, k).Activate
    Else
            z = 0
            ActiveCell.EntireRow.Copy
            Range(ActiveCell.Offset(y), ActiveCell.Offset(1)).EntireRow.Insert
            Do
                i = i + 1
                z = z + 1
                Cells(i, 2).Value = Cells(i, 2).Value + z
            Loop While z < (y + 1)
            Cells(i, k).Activate
            Application.CutCopyMode = False
    End If

Loop While i < x


End Sub
Sub-Macro2()
'
'宏2宏
“奥拉
'
作为整数的Dim i
作为整数的Dim x
Dim y作为整数
将k变为整数
将z调整为整数
i=2
x=Application.InputBox(“行数”,“行数”,类型:=1)
k=应用程序输入框(“列”,“选择1表示A,选择2表示B,选择5表示E…”,类型:=1)
做
y=单元(i,k).值
如果y=0,则
i=(i+1)
细胞(i,k)。激活
其他的
z=0
ActiveCell.EntireRow.Copy
范围(ActiveCell.Offset(y)、ActiveCell.Offset(1)).EntireRow.Insert
做
i=i+1
z=z+1
单元格(i,2)。值=单元格(i,2)。值+z
z<(y+1)时循环
细胞(i,k)。激活
Application.CutCopyMode=False
如果结束
当i
可以尝试从单元格ie的内容创建一个
日期
类型变量

如果
范围(“A1”)
20/01/2013
,则

dim myDate as Date
myDate = CDate(Range("A1"))
Cdate()
将单元格中的任何内容转换为日期类型。因此,您不是依赖编译器来选择单元格内容的数据类型,而是显式地告诉编译器将内容视为日期

现在,您可以使用
DateAdd()
函数添加到日期

myDate = DateAdd("d", 1, myDate)
然后写回另一个单元格

Range("A2") = myDate
一艘班轮可能是

Cells(x,y).Offset(1,0) = DateAdd("d", 1, Cdate(Cells(x,y)))
也许更简单的解决办法是说

Cells(x, y) = CDate(Cells(x,y)) + 1

但现在,至少你明白了为什么以及如何感谢快速回答范围(“A1”)对我来说不可能,因为我需要使用符号(我将它们放入while/do中),这就是为什么我使用单元格而不是范围…除此之外,我怀疑这件事不起作用,因为我的单元格格式不正确…我已经尝试过选择它们并更改格式,但我不确定它是否起作用。我将尝试你所说的,使用单元格,然后返回sec@user3115524对不起,出什么问题了?好的,刚试过这个Doi=i+1z=z+1dthedate=DateAdd(“d”,z,CDate(Cells(i,4)))Cells(i,4)。Value=dTheDate在z<(y+1)时循环,它完全破坏了我的excel文件(我有一个备份:),但第一次它没有给我错误,这是一个start@user3115524如果你不介意上传文件到一个免费的托管网站,并给我的链接,我可能可以解决这个问题,如果你不能让它工作。虽然你没有犯错误,但这只是调整正确的方向的问题coordinates@user3115524那是个男孩!如果能帮助你,最好考虑一下答案: