2015-10-12 212 views
1

這是我編寫的代碼,但基本上我想將數據從一個工作表複製到另一個條件如:「closed」,並通過執行舊工作表中的行必須刪除。我能夠複製一行到另一張表,但它複製行4次,我不明白爲什麼。你能看看這個代碼嗎?我不是那麼高級的VBA。將數據從一個工作表複製到另一個工作表並從舊工作表中刪除行

Sub macro_1() 
Dim lr As Long, lr2 As Long, r As Long 
lr = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 
lr2 = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row 
For r = lr To 2 Step -1 
Last = Cells(Rows.Count, "G").End(xlUp).Row 
For i = Last To 2 Step 1 

If Range("G" & r).Value = "closed" Then 
    Rows(r).Copy Destination:=Sheets("Sheet2").Range("A" & lr2 + 1) 
    lr2 = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row 
End If 
    If (Cells(i, "G").Value) = "closed" Then 'Cells (i, "A").EntireRow.ClearContents ' USE THIS TO CLEAR CONTENTS BUT NOT DELETE ROW 
    Cells(i, "A").EntireRow.Delete 
End If 
Next i 

Next r 

End Sub 

回答

0

你不需要第二個循環,那是什麼導致你的問題。

此外,最好總是聲明對象的父母。下面的代碼聲明瞭兩張紙,然後每個範圍都被限定在正確的紙上。這樣,如果由於某種原因焦點丟失到活動工作表,則不會遇到錯誤。

這也使得它更容易重新命名錶。名字只需要在一個地方固定不多。

Sub macro_1() 

Dim lr As Long, lr2 As Long, r As Long 
Dim ws1 As Worksheet, ws2 As Worksheet 

Set ws1 = Sheets("Sheet1") 
Set ws2 = Sheets("Sheet2") 

lr = ws1.Cells(Rows.count, "A").End(xlUp).Row 

For r = lr To 2 Step -1 
    lr2 = ws2.Cells(Rows.count, "A").End(xlUp).Row + 1 

    If ws1.Range("G" & r).value = "closed" Then 
     ws1.Rows(r).copy Destination:=ws2.Range("A" & lr2) 
     ws1.Cells(r, "A").EntireRow.Delete 
    End If 
Next r 

End Sub 
相關問題