10

我的宏有问题。它删除满足某些条件的行。但是,当几个连续的行满足这些条件时,就会发生错误。当行被删除时,其他行向上移动,因此如果行(2:2)和行(3:3)满足条件,则行(2:2)被删除,行(3:3)向上移动,所以它变成了 row(2:2),并且 For 循环转到另一行(第三行)。结果,曾经是 row(3:3) 而现在是 row(2:2) 的行被省略并且没有被删除。
为了处理这个话题,我认为反转到For循环就足够了,所以它不会从上到下而是从下到上。Te resulat 将对某些行进行双重检查,但不会省略任何行。
问题是我不知道如何修改 For 循环。我试图将“For x = startrow To endrow”更改为“For x = endrow To startrow”,但没有帮助。
这是代码:

Sub Repurchase_upload()

Dim Worksheet As Worksheets
startrow = Worksheets("GUTS").Cells(10, 1)
endrow = Worksheets("GUTS").Cells(11, 1)

 For x = startrow To endrow 'I have tried to change this line into: 'For x = endrow To startrow', but it didn' help
            If Cells(x, "A").Value <> "AA" And Cells(x, "A").Value <> "AB" And Cells(x, "A").Value <> "AC" And Cells(x, "A").Value <> "AD" And Cells(x, "A").Value <> "AE" And     Cells(x, "A").Value <> "AH" And Cells(x, "A").Value <> "AI" And Cells(x, "A").Value <> "AF" And Cells(x, "A").Value <> "AG" Then
            Cells(x, "A").EntireRow.Delete

            End If



    Next
End Sub  

非常感谢你们,致以
最诚挚的问候,
Artur Rutkowski

4

3 回答 3

34

如果要循环和删除行,则需要从底部开始并进行处理:

For x = endrow To startrow step -1

然后删除行不会中断您的循环。

于 2013-07-30T10:14:57.300 回答
8

循环前进:

For i = 1 To 10
    'Do something
Next i

向后循环(Step -1在 for 循环的末尾使用):

For i = 10 To 1 Step -1
    'Do something
Next i
于 2018-02-04T23:41:21.520 回答
2

另一种选择是在每次删除后放置 x=x-1 。但是自下而上的工作会更好。

于 2013-07-30T19:43:50.710 回答