【发布时间】:2014-08-22 08:00:37
【问题描述】:
我一直在 Excel 中编写一个宏,它扫描记录列表,找到内容中带有“CHOFF”的任何单元格,复制包含它的行,然后将这些单元格粘贴到另一个工作表中。它是格式化报告的较长代码的一部分。
它工作得很好,只是“For Each”循环似乎随机跳过了一些条目。它不是每隔一行,我尝试对它进行不同的排序,但是无论如何都会跳过相同的单元格,所以它似乎与单元格的顺序无关。我尝试使用 InStr 而不是 cell.value,但仍然跳过了相同的单元格。
您知道是什么原因导致代码无法识别分散在该范围内的某些单元格吗?
有问题的代码如下:
Dim Rng As Range
Dim Cell As Range
Dim x As Integer
Dim y As Integer
ActiveWorkbook.Sheets(1).Select
Set Rng = Range(Range("C1"), Range("C" & Rows.Count).End(xlUp))
x = 2
For Each Cell In Rng
If Cell.Value = "CHOFF" Then
Cell.EntireRow.Select
Selection.Cut
ActiveWorkbook.Sheets(2).Select
Rows(x).Select
ActiveWorkbook.ActiveSheet.Paste
ActiveWorkbook.Sheets(1).Select
Selection.Delete Shift:=xlUp
y = x
x = y + 1
End If
Next Cell
【问题讨论】:
-
您是否单步执行了代码,尤其是在移动行时。我认为问题可能与您在迭代
Rng时对其进行了修改有关。 -
这些单元格中是否有空格?这通常是未清理数据的问题。您也可以尝试确保
Rng.Address显示您期望它显示的内容。 -
我已经完成了它,它做了我想要的,除了跳过一些它应该因为某种原因而捡起来。 Rng 在循环期间没有被修改,因为 x 变量不是范围的一部分(仅用于目标位置)。我还尝试了 InStr 以确保它不是空间问题,但没有任何问题,也没有帮助。这是来自数据提取,因此单元格非常一致。