【问题标题】:Date loop overflow日期循环溢出
【发布时间】:2022-08-17 17:17:54
【问题描述】:

我有两个日期,都在一个命名的单元格中。 Range(\"NewStartDate\").Value = 24/07/2022 和 Range(\"FinishDate\").Value = 31/12/2023

我需要所有列都有标题,这是上一列后 7 天的日期,即 A1 是 NewStartDate,B1 是 NewStartDate+7,C1 是 NewStartDate + 7*2,等等,一旦我们到达 FinishDate,它就会结束。

我创建了这个循环


Sub FillInDates()


Dim i as Integer, d as Date, x as Date


Range(\"NewStartDate\").Value = \"24/07/2022\"
Range(\"FinishDate\").Value = \"31/12/2023\"

d = Range(\"NewStartDate\").Value
i = 1

Do While x < FinishDate
     Range(\"NewStartDate\").Offset(0, i).Value = DateSerial(Year(d), Month(d), Day(d) + (7*i)
     x = Range(\"NewStartDate\").Offset(0, i).Value
     i = i + 1
Loop 

End Sub

它会在下周用正确的内容填写以下列,但是它永远不会停止,并且出现溢出错误。为什么一旦我们超过结束日期它就无法停止?

  • FinishDate 是如何定义的?此外,您还与 Range 对象进行了很多交互,这是非常低效的。填充 1xN 二维数组然后将该数组复制到整个标题范围会快得多。
  • 你是什​​么意思它是如何定义的?它的值与 x 的值具有相同的格式,并且是 31/12/2023。
  • FinishDate 和 x 变量在您的代码中没有初始值
  • 对不起,他们在我的宏中做了我只包含循环,因为我的整体代码要大得多。见编辑
  • 您的问题出在其他地方 - 如果我运行您发布的代码(并添加 FinishDate = Range(\"FinishDate\")),它会达到您的预期。

标签: excel vba date while-loop runtime-error


【解决方案1】:

我无法重现您的错误,但我可以建议使用数组而不是一次与电子表格交互一个单元格 - 它要快得多。

您的代码可能如下所示:

Sub FillInDates()

  Dim StartDate As Date
  Dim FinishDate As Date
  
  StartDate = Range("NewStartDate")
  FinishDate = Range("FinishDate")
  
  Dim i As Long
  Dim DateArray As Variant
  
  ReDim DateArray(1 To 1, 1 To Int((FinishDate - StartDate) / 7)) As Variant
  
  For i = 1 To UBound(DateArray, 2)
    DateArray(1, i) = StartDate + i * 7
  Next i
  
  Range("NewStartDate").Offset(0, 1).Resize(1, UBound(DateArray, 2)) = DateArray

End Sub

【讨论】:

    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多