2016-02-26 88 views
0

我下面寫的代碼在列A,F和G刪除整個排在Excel VBA

Sub DeleteRawBlank() 

    Dim Cnt As Long 
    Dim RowCnt As Integer 

    RowCnt = Worksheets("Raw").UsedRange.Rows.Count 

    Worksheets("Raw").Activate 

    For Cnt = RowCnt To 2 Step -1 
    If Trim(Worksheets("Raw").Cells(Cnt, "A").Value) <> "" And 
     Trim(Worksheets("Raw").Cells(Cnt, "F").Value) <> "" And 
     Trim(Worksheets("Raw").Cells(Cnt, "G").Value) <> "" Then 
     Rows(Cnt).Delete 
    End If 
Next Cnt 
End Sub 

沒有值刪除行,但它不工作。請任何幫助

回答

0

您應該使用.Cells屬性中的列的整數值。

您還應該利用使用With...End With Statement

Sub delete_row() 
    Dim Cnt As Long 
    Dim RowCnt As Integer 
    Dim wb As Workbook, wsRaw As Worksheet 

    Set wb = ThisWorkbook 
    Set wsRaw = wb.Worksheets("Raw") 

    With wsRaw 
     RowCnt = .Range("A" & .Rows.Count).End(xlUp).Row 

     For Cnt = RowCnt To 2 Step -1 
      If Trim(.Cells(Cnt, 1).Value) <> "" And _ 
       Trim(.Cells(Cnt, 6).Value) <> "" And _ 
       Trim(.Cells(Cnt, 7).Value) <> "" Then 
       Rows(Cnt).Delete 
      End If 
     Next Cnt 
    End With 
End Sub 
+0

我不知道爲什麼,但即使你的代碼也不會刪除行。 – refactor

+0

那麼它肯定是你的If語句的一個問題,你期望它的評估與它實際評估的是什麼。你只想刪除列A,F和G中有數據的行嗎? –

+0

如果條件良好,並且「行(Cnt).Delete」也正在執行,但行不會被刪除。 – refactor

0

使用= Empty,而不是<> ""

<> ""將返回True如果Cell中有一些數據。

Sub DeleteRawBlank() 

     Dim Cnt As Long 
     Dim RowCnt As Integer 

     RowCnt = Worksheets("Raw").UsedRange.Rows.Count 

     Worksheets("Raw").Activate 

     For Cnt = RowCnt To 2 Step -1 
      If Trim(Worksheets("Raw").Cells(Cnt, "A").Value) = Empty And _ 
       Trim(Worksheets("Raw").Cells(Cnt, "F").Value) = Empty And _ 
       Trim(Worksheets("Raw").Cells(Cnt, "G").Value) = Empty Then 

       Rows(Cnt).Delete 

      End If 
     Next Cnt 
End Sub 
0

您的代碼將只在情況下刪除行時FA,所有單元格,G不會是空白。因此,如果您需要刪除AF,G中的空單元格的行,那麼您應該在代碼中使用=而不是<>,它可以正常工作。
此外,您可能會遇到另一個問題,integer變量類型的範圍有限(從-32768到32767),所以如果您使用的範圍的行數超出此範圍,則會收到錯誤。
另外,請注意usedrange.rows.countusedrange.columns.count在使用範圍不是從A1開始的情況下,因爲UsedRange.Rows.Count計數使用範圍內的行數,不計算工作表中的行數,所以使用範圍內的行數不總是相等的到工作表中最後使用的行。

我已經tryied簡化你的代碼,我認爲它應該爲你工作得很好:

Sub DeleteRawBlank() 
    Dim Cnt&, RowCnt& 
    With Worksheets("Raw") 
     RowCnt = .Cells.Find("*", , , , , xlPrevious).Row 
     For Cnt = RowCnt To 2 Step -1 
     If WorksheetFunction.Trim(.Cells(Cnt, "A") & .Cells(Cnt, "F") & .Cells(Cnt, "G")) = "" Then 
      .Rows(Cnt).Delete 
     End If 
     Next Cnt 
    End With 
End Sub 

還有一件事,trim會移除左,右兩側只有空間,但不會刪除內串有多餘的空格,因此,如果您需要刪除所有多餘的空格,那麼你應該使用WorksheetFunction.Trim 因此,它會像例如在下面:

trim(" A B")將返回"A B"
trim$("A B ")將返回"A B"
WorksheetFunction.Trim(" A B ")將返回"A B"