對不起,但您錯誤的原因不是您接受的「答覆」。
首先,當你循環: For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
語法假設是在1行:
For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
(除非你的2行的代碼之間有-
,或你沒」你可以分享你的代碼)。
但是,您已經在上一行中分配了Workbooks("ExtractedColumns").Sheets("practice")
到ws
,那麼爲什麼不使用 For Each curr In ws.Range("G:G")
。
此外,通過你的整個G列循環將永遠需要,遍歷G欄中只佔用的單元格,用:
For Each curr In ws.Range("G1:G" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row)
2ns的原因,一旦找到了行,其中curr.Value = " - "
,並且希望要刪除整行,您需要使用curr.EntireRow.Delete
。
最後,就像@Comintern所提到的那樣,您需要捕獲有錯誤的單元格,您不需要爲curr.Value
指定另一個變量,只需使用If IsError(curr.Value) Then
即可。
代碼
Sub deleteRows()
Dim curr As Range
Dim ws As Worksheet
Set ws = Workbooks("ExtractedColumns").Sheets("practice")
' loop through only occupied cells in Column G
For Each curr In ws.Range("G1:G" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row)
On Error Resume Next
If IsError(curr.Value) Then ' check if cell.value return an error
If Err.Number <> 0 Then
Err.Clear
On Error GoTo 0
End If
Else ' current cell.value doesn't return an error
If curr.Value = " - " Then
curr.EntireRow.Delete '<-- delete entire row
End If
End If
Next curr
End Sub
@pokemon_Man沒有,在技術上它是下一行... – ARich
你試過打印curr'的'值時,它給你的類型不匹配的錯誤? – ARich
你需要測試'IsError'。 – Comintern