Excel VBA运行时错误';13';类型不匹配 子比较线() Application.ScreenUpdating=False 单元格(3,3)。激活 而ActiveCell.Value为“” 如果ActiveCell.Value-ActiveCell.Offset(-1,0).Value

Excel VBA运行时错误';13';类型不匹配 子比较线() Application.ScreenUpdating=False 单元格(3,3)。激活 而ActiveCell.Value为“” 如果ActiveCell.Value-ActiveCell.Offset(-1,0).Value,vba,excel,Vba,Excel,这是我的代码,我目前正在处理该错误 错误是Excel VBA运行时错误“13类型不匹配 错误所在的行:如果ActiveCell.Value-ActiveCell.Offset(-1,0).Value

这是我的代码,我目前正在处理该错误

错误是Excel VBA运行时错误“13类型不匹配

错误所在的行:
如果ActiveCell.Value-ActiveCell.Offset(-1,0).Value<0,则

这段代码在以前的工作表上工作过,但当我将此宏导入到新工作表时,它似乎不起作用。我在上面找到的所有解决方案似乎都不适用于我的情况,因此非常感谢在这个问题上提供的任何帮助

我正在使用的数据示例:

一般来说,
下一步错误恢复时
应该非常小心

如果你把它放在你的代码中,它会开始忽略错误,如果有人在你之后使用代码,他会一点也不高兴(或者他会认为你是业余爱好者或职业捍卫者)。话虽如此,CPearson有一篇关于它的好文章,值得一读-

最后但并非最不重要的一点是,一旦您意识到错误发生的原因,请确保将“错误恢复下一步”更改为其他内容

在您的情况下,最好使用
IsNumeric
函数来避免类型不匹配错误。如果出现其他错误,请尝试使用类似的方法来避免它们

Sub compareLines()

    Application.ScreenUpdating = False
    ActiveSheet.Cells(3, 3).Activate

    While ActiveCell.Value <> ""

        If ActiveCell.Value - ActiveCell.Offset(-1, 0).Value < 0 Then

            ActiveCell.EntireRow.Delete

        Else

            ActiveCell.Offset(1, 0).Activate

        End If

    Wend

    Application.ScreenUpdating = True

    End Sub
将v1作为量程,v2作为量程
而ActiveCell.Value为“”
设置v1=ActiveCell.Value
Set v2=ActiveCell.Offset(-1)
如果是数字(v1)和数字(v2),则
'两者都是数字,因此对这些值执行算术是安全的
如果v1-v2<0,则
ActiveCell.EntireRow.Delete
其他的
ActiveCell.Offset(1,0).激活
如果结束
其他:ActiveCell.Offset(1,0)。激活
如果结束
温德

类型不匹配
如果您的一个值未被视为数字,则会发生。我建议注释掉您的
屏幕更新
行,并使用
F8
单步执行代码。当它抛出错误时,请检查activecell和上面的单元格。因此,您需要确定程序*应该*做什么,当我t遇到一个非数值。它应该跳过?还是应该删除?它应该做其他事情吗?您可以使用
If
块来预测这一点,或者可以使用结构化错误处理程序等。或者只需在错误恢复下一步写
子比较()并查看其工作原理。将现有的
If…End If
包装在
If-IsNumeric(ActiveCell)和IsNumeric(ActiveCell.Offset(-1,0))中,然后…End If
@AydanHowell-如果我在错误恢复下一步发布
,作为答案,它将被否决,相信我。
Dim v1 as Range, v2 as Range
While ActiveCell.Value <> ""
    Set v1 = ActiveCell.Value
    Set v2 = ActiveCell.Offset(-1)
    If IsNumeric(v1) And IsNumeric(v2) Then
        'Both are numeric, so it's safe to perform arithmetic against these values
        If v1 - v2 < 0 Then
            ActiveCell.EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Activate
        End If
    Else: ActiveCell.Offset(1, 0).Activate
    End If
Wend