2017-07-28 2 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 

Dies ist mein Code, ich bin derzeit der Fehler auf.Excel VBA-Laufzeitfehler '13' Typ stimmt nicht überein

Der Fehler ist Excel VBA runtime error "13 type mismatch.

Die Linie der Fehler ist: If ActiveCell.Value - ActiveCell.Offset(-1, 0).Value < 0 Then

Dieser Code auf frühere Arbeitsblatt gearbeitet hatte, aber als ich dieses Makro auf ein neues Arbeitsblatt zu importieren, scheint es nicht zu funktionieren. All die Lösung, die ich auf SO gefunden habe, scheint nicht auf meine Situation zutreffen, daher würde jede Hilfe zu diesem Problem sehr geschätzt werden.

Eine Probe der Daten Ich verwende:
enter image description here

+0

Welche Zeile gibt den Fehler aus? Ich würde auch empfehlen, dass Sie dies in einem Modul haben und gehen die Blätter werfen, wie Sie von dort brauchen – Zac

+0

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

+0

was sind die Werte von 'ActiveCell.Value' und' ActiveCell.Offset (-1, 0) .Value'? – braX

Antwort

1

Im Allgemeinen On Error Resume Next ist etwas, das man mit extrem vorsichtig sein sollte.

Wenn Sie es in Ihren Code eingeben, würde es beginnen, Fehler zu ignorieren und wenn jemand mit Code nach Ihnen arbeitet, wäre er überhaupt nicht glücklich (oder er würde denken, Sie sind ein Amateur oder Job-Verteidiger). Having said that, CPearson einen guten Artikel darüber hat, das ist würdig zu lesen - http://www.cpearson.com/excel/errorhandling.htm

Last but not least, stellen Sie sicher, dass Sie On Error Resume Next, um etwas anderes zu ändern, wenn Sie erkennen, warum die Fehler passiert.

In Ihrem Fall ist es eine gute Idee, um die IsNumeric Funktion zu nutzen, die TypeMismatch Fehler zu vermeiden. Wenn andere Fehler auftreten, versuchen Sie, sie mit einer ähnlichen Angelegenheit zu vermeiden.

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 
Verwandte Themen