【问题标题】:VBA - Do While loop nested in a For Loop; Application-defined or object-defined errrorVBA - Do While 循环嵌套在 For 循环中;应用程序定义或对象定义的错误
【发布时间】:2018-04-08 02:31:36
【问题描述】:

目标:

所以我是 VBA 的新手,正在编写一个快速脚本,试图记录一周内完成的工作小时数。

它通过将 This Week 工作表中第 27 行中包含的每天完成的工作小时数从 B 列(星期一)复制到 G 列(星期六)并将该信息粘贴到 @987654322 @工作表从 B 列开始,一直到 G 列。

我想这样做,以便即使在我更改了下周的 This week 工作表之后,我也可以永久记录完成的小时数。

所以我尝试编写此脚本,以便如果它看到上面的行充满信息,它会尝试下面的行。

这将产生一个永久的、按时间顺序(每周开始一个新行)的记录,记录每周每天完成的小时数。

我会在一周结束前运行此程序,然后再清除下周的日程安排。

代码:

Sub Hours()
Dim i As Integer
Dim j As Integer
Dim hoursdone As Long

j = 0
For i = 2 To 7
    hoursdone = Worksheets("This Week").Cells(27, i).Value
    Do While Worksheets("Hours").Cells(j, i).Value <> Empty
        j = j + 1
    Loop
    Worksheets("Hours").Cells(i, j) = hoursdone
    Next i

End Sub

我不断收到的错误:

Application-defined or object-defined error

当我点击Debug 时,它会将我带到Line 9,但我不知道出了什么问题?

谢谢

PS:我想最终将这个东西绑定到我的This week工作表中的一个按钮上,记录数据,让我清除This week

【问题讨论】:

  • Do While Worksheets("Hours").Cells(j, i).Value ""
  • 空是一个有效的条件。在即时窗口中尝试?activecell = empty
  • 有点奇怪的是,您将行数设置为整​​数,但允许某人工作 长时间 小时。

标签: vba excel


【解决方案1】:

那是因为j 的开头是号码0。你不能有Cells(0, 2),行从数字1开始。

j = 0 更改为j = 1,并将其移至For...Next 语句中。

For i = 2 To 7

    j = 1
    hoursdone = Worksheets("This Week").Cells(27, i).Value
    Do While Worksheets("Hours").Cells(j, i).Value <> Empty
        j = j + 1
    Loop
    Worksheets("Hours").Cells(i, j) = hoursdone
    Next i

End Sub

如果您没有在 For 语句中移动 j = 1,那么下一次迭代 j 将是它在您的 Do...loop 中时停止的位置。

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2012-10-10
    • 2022-01-11
    • 2013-10-26
    相关资源
    最近更新 更多