Excel VBA删除行

时间:2016-01-27 16:24:26

标签: excel vba excel-vba

我正在尝试创建一个程序,该程序将根据用户放入某一行的内容删除或创建行。例如,如果用户输入3,但只有2行,那么它将插入1行。如果有5行,它将删除第4行和第5行。看起来它应该是一个简单的代码,但我最难实际删除/创建我想要的行。我的代码如下:

Sheets("Summary").Select

x = Cells(29, 3).Value
i = 7

Sheets("Weighted I").Select

Do Until Cells(i, 1).Value = "TOTAL"
    i = i + 1
Loop

i = i - 7
If i > x Then   
    dlt = i - x + 7

    For cnt = 7 To dlt
        Rows(cnt).EntireRow.Delete
        cnt = cnt + 1
    Next    
ElseIf i < x Then
    crt = x - i + 7

    For cnt = 7 To dlt
        Rows(cnt).EntireRow.Insert
        cnt = cnt + 1
    Next
End If

1 个答案:

答案 0 :(得分:2)

这是删除行时的常见问题。想象一下,您正在逐行移动一行for循环并删除:

For cnt = 7 To dlt
    Rows(cnt).EntireRow.Delete
    cnt = cnt + 1
Next 

您在第7行,然后将其删除。这会将所有行向上移动。第8行现在是第7行。然后你将cnt变量增加1(到8)并删除第8行。但你错过了第7行,这是第8行......这是疯狂的香蕉。

相反,请将for循环更改为向后工作:

For cnt = dlt to 7 step -1
    Rows(cnt).EntireRow.Delete
    cnt = cnt - 1
Next    

这样,行移位不会影响cnt