2017-02-03 148 views
0

如果列G中的單元格的值爲「 - 」,我已經編寫了刪除行的代碼。但是,在引用每個循環中的單元格時,我會遇到類型不匹配。我知道問題來自「curr.Value」,但我不知道如何解決。有任何想法嗎?Excel VBA Range.Value類型不匹配?

這裏是我的代碼:

Sub deleteRows() 
Dim curr As Range 
Dim ws As Worksheet 
Set ws = Workbooks("ExtractedColumns").Sheets("practice") 
For Each curr In 
    Workbooks("ExtractedColumns").Sheets("practice").Range("G:G") 
    If curr.Value = " - " Then 
     EntireRow.Delete 
    End If 
Next 
End Sub 
+0

@pokemon_Man沒有,在技術上它是下一行... – ARich

+0

你試過打印curr'的'值時,它給你的類型不匹配的錯誤? – ARich

+1

你需要測試'IsError'。 – Comintern

回答

1

你可以嘗試將值分配給一個變種和檢查的類型。

Dim vVal as Variant 


..... 

vVal = curr.Value 
if IsError(vVal) then 

etc 
.... 
+0

謝謝,這工作! – studiis

+0

對不起,但錯誤的原因是因爲他在不捕獲有錯誤的單元格時,不需要分配額外的變量。他可以只是'如果IsError(curr.Value)Then' –

1

對不起,但您錯誤的原因不是您接受的「答覆」。

首先,當你循環: 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 
+0

@studiis你看過我的回答嗎? –

+0

要說沒有必要添加引用變量是一個有點迂迴。這只是向他解釋錯誤是什麼,以及他如何處理錯誤。 – PaulG

+0

@PaulG它不是迂腐,它只是不是錯誤的原因,現在-1我的答案(它沒有錯誤):) –

0

我懷疑是由包含數值CURR引起類型不匹配錯誤,進行比較的字符串...很難知道肯定不能夠看到休息的代碼以及如何填充curr,但嘗試使用curr.text,它會爲您的If測試返回一個字符串,而不是curr.value

希望這有助於 TheSilkCode