Excel VBA Range.Valuetypes不匹配?
如果列G中的单元格的值为“ – ”,我写了代码删除一行。 但是,在引用每个循环中的单元格时,我得到的types不匹配。 我知道问题来自“curr.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
您可以尝试将值分配给变体并检查types。
Dim vVal as Variant ..... vVal = curr.Value if IsError(vVal) then etc ....
我很抱歉,但你错误的原因不是你接受的“答复”。
首先,循环时: For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
该语法假设在1行中:
For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
(除非你有-
在两行代码之间,或者你没有分享你的代码)。
但是,你已经在上一行中为ws
分配了Workbooks("ExtractedColumns").Sheets("practice")
,所以为什么不使用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的原因,一旦findcurr.Value = " - "
,并且想要删除整行,就需要使用curr.EntireRow.Delete
。
最后,像@Comintern所提到的那样,你需要捕获错误的单元格,你不需要为curr.Value
赋值另一个variables,只需要使用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
我怀疑types不匹配错误是由curr包含一个数值引起的,与一个string进行比较…很难知道确切无法看到代码的其余部分,如何curr填充,但尝试使用curr.text
它为您的Iftesting返回一个string,而不是curr.value
。
希望这有助于TheSilkCode