【问题标题】:Excel 2013 VBA - For Next Loop Suddenly Stopped WorkingExcel 2013 VBA - 下一个循环突然停止工作
【发布时间】:2016-01-02 03:58:18
【问题描述】:

我几乎不好意思发布这个,但我傻眼了。 6 个月前,我编写了一个非常简单的 For/Next 循环来循环遍历列的单元格,如果满足某些条件,则执行操作。在过去的 6 个月里,它运行良好。今天,它停止工作。


Sub Button1_Click()
Dim x As Integer
Dim DateCell As String
Dim LastRow As Variant

LastRow = Worksheets("Paste Here").Range("A65536").End(xlUp).Row

On Error Resume Next

For x = 2 To LastRow

    DateCell = Worksheets("Paste Here").Range("A" & x)

    If Right(DateCell, 4) = "2015" Then
      Else
       Worksheets("Paste Here").Range("A" & x).Select
       Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Worksheets("Paste Here").Range("A" & x).Value = Worksheets("Paste Here").Range("A" & x - 1).Value
   End If

Next x

On Error GoTo 0

MsgBox ("Done! " & x & " rows analyzed.")
End Sub

当我单步执行“For”行时,它会将 x 的值设置为零。当它到达“Next x”行时,它会将其增加到 1,但随后不会循环……而是转到“On Error”并完成。我什至尝试在循环之前设置 x = 2,但同样的事情......它会增加到 3 然后退出循环。

有什么可以改变的?我什至回到我的原始文件并尝试运行它,同样的事情。

【问题讨论】:

  • LastRow 的值是多少(为什么你使用Variant 而不是Long?)?另外我建议您注释掉On Error Resume Next 行并运行代码。
  • 在不改变 x 值的情况下单步执行时,LastRow 中的值是多少?
  • 可能听起来很愚蠢 - 但Paste Here 表的 A 列中是否真的有数据?
  • 不是原因,但是,如果您的数据超过 32768 行,您将在此处出现错误 Dim x As Integer,因为这是整数的限制。将其更改为 Dim x As Long。
  • 为什么当循环状态为 x = 2 时它设置 x=0?

标签: vba excel for-loop next


【解决方案1】:

马修走在了正确的轨道上。因为这条线: LastRow = Worksheets("粘贴到这里").Range("A65536").End(xlUp).Row 如果您在 A65536 上方和单元格 A32768 下方的 A 列中的单元格中有内容,则 VBA 只会将 x 设置为 0,并且不会执行循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2021-02-01
    相关资源
    最近更新 更多