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