如果G列中的单元格的值为“ - ”,我就编写了删除行的代码。但是,当引用每个循环中的单元格时,我得到类型不匹配。我知道问题来自“curr.Value”,但我不知道如何修复它。有什么想法吗?
这是我的代码:
zk-nodes
答案 0 :(得分:2)
对不起,但您错误的原因并不是您接受的“答案”。
首先,当你循环:
For Each curr In
Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
语法假设为1行:
For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
(除非您在两行代码之间有-
,或者您没有共享代码)。
但是,您已在上一行中将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
答案 1 :(得分:1)
您可以尝试将值分配给变量并检查类型。
Dim vVal as Variant
.....
vVal = curr.Value
if IsError(vVal) then
etc
....
答案 2 :(得分:0)
我怀疑类型不匹配错误是由包含数字值的curr引起的,与字符串进行比较...很难确定无法查看其余代码以及如何填充curr但尝试使用curr.text
为您的If测试返回一个字符串,而不是curr.value
。
希望这有帮助, TheSilkCode