2016-05-03 13 views
1

Irgendwelche Ideen, warum ich Runtime-Fehlertyp Mismatch für den folgenden Code bekomme? Es scheint ein Problem mit der if-Anweisung zu geben.Laufzeitfehler beim Löschen der Schleife

Der Fehler Laufzeit ist Typenkonflikt

Dim rng As Range 
Dim cell_search As Range 
Dim del As Range 
Dim FrRngCount As Range 
Dim I As Integer 
Dim DatatoData As Worksheet 

Set DatatoData = ThisWorkbook.Worksheets("PCA DATA2") 

Set FrRngCount = DatatoData.Range("A:A") 
I = Application.WorksheetFunction.CountA(FrRngCount) 

Set rng = Intersect(DatatoData.Range("CV2:CV" & I), DatatoData.UsedRange) 

For Each cell_search In rng 
If (cell_search.Value) = "Not in Range" Then 
    If del Is Nothing Then 
     Set del = cell_search 
    Else: Set del = Union(del, cell_search) 
    End If 
End If 
Next cell_search 
On Error Resume Next 
del.EntireRow.Delete 

Vielen Dank für Ihre Hilfe. Pete

+1

Welchen Laufzeitfehler bekommen Sie? – MatthewD

+0

Der Laufzeitfehler ist nicht übereinstimmend. –

+0

Auf welcher Zeile erhalten Sie diesen Fehler? – Ralph

Antwort

1

Wird Rng auf Nothing gesetzt? Versuchen Sie dies:

Option Explicit 

Sub Test() 

Dim rng As Range 
Dim cell_search As Range 
Dim del As Range 
Dim FrRngCount As Range 
Dim I As Integer 
Dim DatatoData As Worksheet 

Set DatatoData = ThisWorkbook.Worksheets("PCA DATA2") 

Set FrRngCount = DatatoData.Range("A:A") 
I = Application.WorksheetFunction.CountA(FrRngCount)  

Set rng = Intersect(DatatoData.Range("CV2:CV" & I), DatatoData.UsedRange) 

If Not rng Is Nothing Then 

For Each cell_search In rng 
    cell_search.Activate 
    If cell_search.Value = "Not in Range" Then 
     If del Is Nothing Then 
      Set del = cell_search 
     Else: Set del = Union(del, cell_search) 
     End If 
    End If 
Next cell_search 

End If 

On Error Resume Next 
del.EntireRow.Delete 

End Sub 

Das ist, was ich habe und es scheint zu arbeiten. Ich habe den cell_search.Active zum Debuggen hinzugefügt. Sie sollten dies versuchen und sehen, welche Zelle es aktiviert, wenn Sie Ihren Fehler erhalten.

+0

Der Compiler stoppt immer noch in dieser Zeile mit dem Laufzeitfehler missmatch: Wenn cell_search.Value = "Nicht im Bereich" Dann –

+0

kann ich nicht mehr Erstelle deinen Fehler. In meinem Test hat dies das Problem behoben. Welche Art von Daten erwarten Sie in Rng? –

+0

Die Felder im Bereich werden basierend auf einer Formel entweder "In Range" oder "Not in Range" angezeigt. –

1

Basierend auf Ihrem obigen Kommentar (wo der Fehler auftritt) scheint es, dass die .Value dieser Zelle nicht bestimmt werden kann. Dies ist der Fall, wenn sich eine Formel in der Zelle befindet, die einen Fehler erzeugt (z. B. #DIV/0! oder #NAME? oder #Ref!).

Also, ich würde vorschlagen, dass Sie die .Value erste Zelle testen, bevor Sie es zu bewerten:

For Each cell_search In Rng 
    If IsError(cell_search.Value) Then 
     'What should happen in this case? 
    Else 
     If (cell_search.Value) = "Not in Range" Then 
      If del Is Nothing Then 
       Set del = cell_search 
      Else: Set del = Union(del, cell_search) 
      End If 
     End If 
    End If 
Next cell_search 

Bitte lassen Sie mich wissen, ob dies das Problem für Sie gelöst.

+0

Danke, die Schleife scheint jetzt zu funktionieren, aber wenn ich del.EntireRow.Delete nach der Schleife hinzufüge, bekomme ich einen Fehler, dass die Objektvariable nicht gesetzt ist. –

+0

Das bedeutet, dass rng leer ist und daher nichts gelöscht werden muss. – Ralph

+0

Funktioniert immer noch nicht. Jetzt sagt es, dass die Methode 'Union' des Objekts _Global fehlgeschlagen ist. Irgendwelche Vorschläge, wie Sie das beheben können? –

Verwandte Themen