2017-07-28 1197 views
0
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 

这是我的代码,我目前的错误。Excel VBA运行时错误'13'类型不匹配

错误是Excel VBA runtime error "13 type mismatch

线的错误是:If ActiveCell.Value - ActiveCell.Offset(-1, 0).Value < 0 Then

此代码已在以前的工作表的工作,但是当我输入这个宏到一个新的工作表,它似乎并没有工作。我在SO上找到的所有解决方案似乎都不适用于我的情况,因此对此问题的任何帮助将不胜感激。

我使用的数据样本:
enter image description here

+0

哪一行会引发错误?此外,我会建议你在模块中有这个,并根据需要抛出工作表 – Zac

+0

@Zac'如果ActiveCell.Value - ActiveCell.Offset(-1,0).Value <0 Then# –

+0

什么是“ActiveCell.Value”和“ActiveCell.Offset(-1,0).Value”的值? – braX

回答

1

一般来说,On Error Resume Next的东西,你应该与非常小心。

如果你把它放在你的代码中,它会开始忽略错误,并且如果有人在你之后使用代码,他根本不会高兴(或者他会认为你是一个业余或工作防御者)。话虽如此,CPearson有一篇关于它的好文章,值得一读 - http://www.cpearson.com/excel/errorhandling.htm

最后但并非最不重要的一点,确保您将On Error Resume Next更改为其他内容,一旦您意识到错误发生的原因。

对于您的情况,使用IsNumeric函数来避免TypeMismatch错误是个好主意。如果出现其他错误,请尽量避免使用类似的问题。

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