Excel VBA Range.Value类型不匹配?

时间:2017-02-03 20:25:50

标签: excel vba excel-vba

如果G列中的单元格的值为“ - ”,我就编写了删除行的代码。但是,当引用每个循环中的单元格时,我得到类型不匹配。我知道问题来自“curr.Value”,但我不知道如何修复它。有什么想法吗?

这是我的代码:

zk-nodes

3 个答案:

答案 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