2012-12-06 268 views
0

我想我需要一個循環函數,但我不知道如何去做。VBA如果單元格空白,刪除行,如果沒有單元格空白,結束序列

此任務是查看特定列是否爲空,然後刪除該行。但是有時候沒有空白的單元格,我得到一個最終的調試錯誤。

這裏是我的代碼:

Sub DeleteRow() 
Dim lr As Long 
Dim shCurrentWeek As Worksheet 
Set shCurrentWeek = AciveWorkbook.Sheets("Current Week") 
lr = shCurrentWeek.Range("A" & Rows.Count).End(xlUp).Row 

'Delete Row 
shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

End Sub 

什麼想法?

回答

2

雖然丹尼爾庫克是正確的,你可以使用On Error Resume Next,這是另一種方式,因爲使用On Error Resume Next真的是在VBA(IMO)中的最後選擇。

下面的代碼在嘗試使用SpecialCells方法之前檢查空白。

Option Explicit 

Sub DeleteRow() 

Dim lr As Long 
Dim shCurrentWeek As Worksheet 

Set shCurrentWeek = ActiveWorkbook.Sheets("Current Week") 
lr = shCurrentWeek.Range("A" & Rows.Count).End(xlUp).Row 

If Application.WorksheetFunction.CountBlank(shCurrentWeek.Range("B4:B" & lr)) <> 0 Then 

    shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

End If 


End Sub 
+0

否,On Error Resume Next是快速和骯髒的解決方案。當你只是想讓它現在能夠工作,並且不想花時間或沒有時間,就可以完全避免這種錯誤。這就是說,這當然可以用於+1。 –

3

如何將on error resume next放在Delete之前?像這樣:

On error resume next 
shCurrentWeek.Range("B4:B" & lr).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

我假設你不在乎它是否失敗,所以沒有必要做錯誤陷阱。如果您的呼叫沒有從SpecialCells返回的單元格,則會顯示錯誤消息。

+0

這正是我所需要的,這樣一個簡單的修復......感嘆。日Thnx。 – kmiao91

+0

+1總是避免範圍循環。請記住在下一行重置錯誤處理程序 – brettdj

1

這是我用於該類型操作的一段代碼。

子ClearBlank()

昏暗我只要

對於i =範圍( 「B65536」)。完(xlUp).Row爲了8步驟-1
如果爲IsEmpty(細胞(I,4))然後行(ⅰ).Delete

下一I

末次

我希望這有助於!

0

在今天之前沒有使用過VBA,所以我確信有一個更好的方法......但是這段代碼會刪除至少有一個空單元格的行。它假定你有一個標題行,並且第一列用於標識,這樣這些單元就不會「看着」。

這個腳本的好處是,它適用於電子表格任何規模的,所以你不必硬編碼值每次:

Sub DeleteIncompleteRows() 
Dim row As Integer, col As Integer 
Dim deleted As Integer 
deleted = 0 
Dim actualRow As Integer 
Dim totalRows As Integer 
Dim totalCols As Integer 
totalRows = Application.CountA(Range("A:A")) 
totalCols = Application.CountA(Range("1:1")) 

For row = 2 To totalRows 
actualRow = row - deleted 
For col = 2 To totalCols 
If ActiveSheet.Cells(actualRow, col).Value = "" Then 
ActiveSheet.Rows(actualRow).Delete 
deleted = deleted + 1 
Exit For 
End If 
Next col 
Next row 
End Sub 

一切順利,

斯科特

相關問題