2015-12-02 56 views
2

請告訴我在我的下面的代碼有什麼問題。我能夠切斷並越過該行,但在此之後,我可以在我的工作表中看到空行。我們如何自動調整行。vba剪切和過去功能沒有任何空白行

切割過去之後,原稿中不應有任何空白行。

Dim i As Variant 
endrow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 
For i = 2 To endrow 
If ws1.Cells(i, "M").Value = str Then 
ws1.Cells(i, "M").EntireRow.Cut Destination:=ws2.Range("A" & LastRow +).EndxlUp).Offset(1) 
End If 
Next 
+2

當您剪切和粘貼,就應該刪除行,所以你的迭代將無法正常工作。用'step -1'試試你的循環' – Raystafarian

+1

同樣交換你的'我'值'對於我= endrow到2步-1'。正如@Raystafarian建議的那樣,該行被刪除,這意味着下一行(它將變成'i'下一個)實際上會移動到您當前的'i'值,這意味着它會被忽略。 – bmgh1985

+0

正如其他人所說 - 你需要通過工作表反向工作。 **另外**切割一個值不會刪除單元格 - 它會留下一個空白單元格(嘗試手動執行)。切割後刪除行 - 'ws1.Cells(i,「M」)。EntireRow.Delete Shift:= xlUp' –

回答

0

這將這樣的伎倆:

Sub Test() 
    Dim i As Long 
    Dim endrow As Long 

    'Added this code to get it working on my test file. 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 
    Dim str As String 
    Dim lastrow As Long 
    Set ws1 = ThisWorkbook.Worksheets("Sheet1") 
    Set ws2 = ThisWorkbook.Worksheets("Sheet2") 
    str = "DELETE THIS ROW" 
    lastrow = 30 
    '''''''''''''''''''''' 

    endrow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row 
    For i = endrow To 2 Step -1 
    If ws1.Cells(i, "M").Value = str Then 
     ws1.Cells(i, "M").EntireRow.Cut Destination:=ws2.Range("A" & lastrow).End(xlUp).Offset(1) 
     ws1.Cells(i, "M").EntireRow.Delete Shift:=xlUp 
    End If 
    Next 
End Sub