【发布时间】:2014-03-12 18:10:08
【问题描述】:
之前我发现了一些由 Andy Brown 编写的 VBA 代码,它生成一个列表,并将每个日期设为另一个用户的第一个或第 15 个日期。我试图根据我的需要调整这段代码,但我很挣扎。目前,代码一旦运行,只是一遍又一遍地输入相同的日期,我必须结束 Excel。
Sub GenerateDates()
Dim FirstDate As Date
Dim LastDate As Date
Dim NextDate As Date
FirstDate = Range("A1").Value
LastDate = Range("a2").Value
NextDate = FirstDate
Range("B1").Select
Do Until NextDate >= LastDate
ActiveCell.Value = NextDate
ActiveCell.Offset(1, 0).Select
If Day(NextDate) = 1 Then
NextDate = DateAdd("d", NextDate, 14)
Else
NextDate = DateAdd("d", NextDate, 20)
NextDate = DateSerial(Year(NextDate), Month(NextDate), 1)
End If
Loop
上面列出了我基于模型的以前的代码,下面是我最有可能糟糕的代码:
Sub GenerateDates()
Dim FirstDate As Date
Dim LastDate As Date
Dim NextDate As Date
FirstDate = Range("startdate").Value
LastDate = Range("enddate").Value
NextDate = FirstDate
Range("tripdays").Select
'selection of columns within one row
Do Until NextDate >= LastDate
ActiveCell.Value = NextDate
ActiveCell.Offset(1, 0).Select
If Day(NextDate) = 1 Then
NextDate = DateAdd("d", NextDate, 14)
End If
Loop
End Sub
我需要的是在给定的开始日期和结束日期之间生成 每个 日期,而不仅仅是 15 日和 1 日。这是怎么做到的?
【问题讨论】:
-
您到底需要什么?我们不知道你想用他的代码做什么。如果您主要将其调整为您的命名范围,那么您不必从他的代码中删除
Else块。将其添加并调整到您的范围。 :) -
我希望输出是范围之间的每个日期,而不是每个日期由第一个和第十五个分隔,所以:开始日期 = 1/1/2014 结束日期 = 1/6/2014输出= 1/1/2014 1/2/2014 1/3/2014 1/4/2014 1/5/2014 1/6/2014 .....另外,我如何正确地为代码做灰色你在那里吗?我大约一周前开始使用 VBA,所以我希望能够学习并能够为以后的其他人做出贡献。
-
现在好多了。在下面修改我的答案。等一下。
-
请参阅下面的修改后的答案。要将文本转换为编辑器中的代码块,只需将其粘贴、突出显示并选择代码块选项。或者,在一行之前添加四 (4) 个空格会将该行变成一个代码块。无论如何,您的问题的解决方案很简单:您只需要
+1开始日期,直到它到达结束日期。 :)