Vb.net 如何使用vba在日期范围内循环浏览周

Vb.net 如何使用vba在日期范围内循环浏览周,vb.net,vba,excel,vbscript,Vb.net,Vba,Excel,Vbscript,我已经了解了如何循环一年中的几周,w1301、w1302、w1303,如果我循环一周数,我可以得到周数,但我相信有一种方法可以直接使用vba循环周数,我希望至少是这样 DateSerial(Year(Now), Month(Now), Day(Now)) To DateSerial(2013, 3, 1) StartDate = #1/1/2013# EndDate = #12/31/2013# For DateLooper = StartDate To EndDa

我已经了解了如何循环一年中的几周,w1301、w1302、w1303,如果我循环一周数,我可以得到周数,但我相信有一种方法可以直接使用vba循环周数,我希望至少是这样

   DateSerial(Year(Now), Month(Now), Day(Now)) To DateSerial(2013, 3, 1)

    StartDate = #1/1/2013#
    EndDate = #12/31/2013#

  For DateLooper = StartDate To EndDate
我得到了从日期算起的一周数的函数

     Public Function IsoWeekNumber(d1 As Date) As Integer
     Attributed to Daniel Maher
     Dim d2 As Long
     d2 = DateSerial(Year(d1 - WeekDay(d1 - 1) + 4), 1, 3)
     IsoWeekNumber = Int((d1 - d2 + WeekDay(d2) + 5) / 7)
     End Function
你可以用这个


一天的整数值为1,因此可以按周进行迭代,如下所示:

startDate = #1/1/2013#
endDate   = #12/31/2013#

For d = startDate To endDate Step 7
  'do stuff
Next
周数可通过功能确定,例如:

WScript.Echo DatePart("ww", Now)

这将在和中都有效。

我尝试了此解决方案,它似乎有效,但我不能100%确定它如何处理不同月份的28、30、31天,但我相信vba。我知道我可能犯了一个错误:))


问题是什么?这是在几天内循环,有没有一种简单的方法可以在几周内循环,而不是在几天内使用+7和getWeek?很明显,vba可以一天循环一次,也可以一周循环一次。我不知道你说的循环几周是什么意思。您可以从1循环到52(
对于i=1到52:执行操作:下一个i
)。您可以循环浏览表示每周第一天(或特定)的日期。您可以找到第一周的第一天,然后每次循环偏移7天,例如:
For startOfWeek=DateSerial(2013,1,1)到DateSerial(2013,1,1)+52*7步骤7
等。没有表示一周的数据类型。因此,您需要将其定义为一个数字(即周数)或表示一周中某一天的日期类型。您到底对哪种语言感兴趣?我是这样做的,但它只会在weekd=#1/1/2013#到#8/28/2013#x=DateAdd(“dd”,7,CStr(weekd))的第一次迭代中增加下一个工作日只需强调vba中内置的函数可以实现您想要的功能。:-)虽然不知道为什么你只看到第一次增长。昨晚我很累,我的大脑不工作,今天早上我解决了它,就像我现在发布的答案一样,谢谢!顺便问一下,第7步会考虑30天、31天、12个月等因素吗?我的是吗?@user2708115您上一次遇到一周没有正好7天的情况是什么时候?我认为日期存储为一个序列号,其中每天都是一个整数,添加7或使用dateadd过程只需将7添加到该数字。将数字格式化为我们可以识别的格式的过程将处理每个月的天数。因此,在我的情况下,我没有类似的内容,我只是使用当前日期,如何处理每个月的天数?我认为您看到的日期只是以特殊方式格式化的日期数字。如果使用
ldate=clng(currentDate)
ldate=ldate+7
currentDate=ldate
它将执行相同的操作(其中ldate是一个长变量)
WScript.Echo DatePart("ww", Now)
  currentDate = "2013-01-02"    ' coz i wanted to start on a wednesday
  for week = 1 to 52
  debug.print currentDate
  currentDate = DateAdd("ww",1,currentDate)
  next week