【发布时间】: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?