2016-05-03 9 views
1

以下のコードでランタイムエラータイプの不一致が発生する理由は何ですか? if文に問題があるようです。削除ループのランタイムエラー

ランタイムエラーは、あなたの助けのための

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 

おかげ型の不一致です。ピート

+1

どのようなランタイムエラーがありますか? – MatthewD

+0

ランタイムエラーは型の不一致です。 –

+0

このエラーが発生するのはどの回線ですか? – Ralph

答えて

1

rngがNothingに設定されていますか?これを試してみてください:

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 

これは私が持っているものであり、動作するようです。私は、デバッグのためにcell_search.Activeを追加しました。これを試して、エラーが発生したときにどのセルがアクティブになっているかを確認する必要があります。

+0

コンパイラはランタイムエラーmissmatchでこの行で停止します:If cell_search.Value = "Not In Range" Then –

+0

私は再実行できません。あなたのエラーを作成します。私のテストでは、この問題が修正されました。あなたはrngでどんなタイプのデータを期待していますか? –

+0

範囲内のフィールドは、「範囲内」または「範囲外」のいずれかの式に基づいて表示されます。 –

1

上記のコメント(エラーが発生した場合)に基づいて、そのセルの.Valueを特定できないようです。エラーが発生するセルに数式がある場合(例:#DIV/0!または#NAME?または#Ref!)、これが該当します。

だから、私はあなたがそれを評価する前に、まずあなたがセルの.Valueをテストすることをお勧めしたい:

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 

これはあなたのための問題を解決する場合は私に知らせてください。

+0

ありがとうございます、今のところループが動作しているようですが、ループの後にdel.EntireRow.Deleteを追加すると、オブジェクト変数が設定されていないというエラーが発生します。 –

+0

これは、rngが空であることを意味し、したがって、削除するものは何もありません。 – Ralph

+0

まだ動作しません。今、オブジェクト_Globalのメソッド 'Union'が失敗したと言います。どのようにこれを修正するための任意の提案? –

関連する問題