2016-01-27 270 views
1

我正在嘗試創建一個程序,該程序將根據用戶在特定行中放置的內容刪除或創建行。例如,如果用戶輸入3,但只有2行,則它將插入1行。如果有5行,它會刪除第4行和第5行。它看起來應該是一個簡單的代碼,但我最難實際刪除/創建我想要的行。我的代碼如下:Excel VBA刪除行

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 

回答

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

+0

JNevill,完美的工作。謝謝,我知道這只是與我的代碼中的邏輯有關。十分感謝你的幫助! – broncos15