2017-11-08 9 views
0

これは明らかに非常に単純なExcel VBA Subです。信頼性の低い動作 - Excel VBAコード - 前例.Countステートメント

Public Sub CheckRef() 

Dim Cell As Range 

For Each Cell In Selection 
    On Error GoTo MyNext 
    If IsNumeric(Cell.Precedents.Count) Then 
     MsgBox (Cell.Address) 
    End If 

MyNext: 
Next Cell 

End Sub 

選択したセルにPrecedentsがある場合、メッセージボックスのセルアドレス。エラーの場合はForループのNext Cellに進みます。

このコードは、On Errorステートメントにもかかわらず

'NO細胞は見つかりませんでした'

実行時エラー1004を提供します。皮肉なことに、最初のインスタンスでは正しくスキップしますが、GIFへのこのScreenshotに示すように、次はエラーになります。

Selection C2:C4 C2 =SUM(A1+A2)(メッセージボックス)、C3 =7+9(正しくエスケープ)C4 =7+9

(実行時エラー1004)

は、私がここで作っています何の間違いに困惑しています。ちょうどそれがExcel 2013 SP1であり、VBAツール - >オプション - >一般 - >エラートラップ - >未処理エラーのブレークがデフォルトで選択されていることに言及してください。それ以上の助けがあれば素晴らしいだろう。ありがとう。

Screenshot to GIF

+0

あなたは 'Resume'は、https://stackoverflow.com/questions/7653287/vba-error-handling-in-loop&https://stackoverflow.comを確認する必要があります/ questions/11998836/excel-vba-on-error-goto-statement-not-working-for-loop –

答えて

0

問題はすでに最初のループで使用されてきたあなたのエラーが

Public Sub CheckRef() 

Dim Cell As Range 

For Each Cell In Selection 
    On Error GoTo MyNext 
    If IsNumeric(Cell.Precedents.Count) Then 
     MsgBox (Cell.Address) 
    End If 
MyNext: 
Resume MyNext2: 
MyNext2: 
Next Cell 

End Sub 

あなたのエラー処理を処理しているので、上記の「リセット」それはresumeを使用して固定しています。

1

別の方法:

Public Sub CheckRef() 

    Dim Cell As Range, qwerty As Range 

    For Each Cell In Selection 
     Set qwerty = Nothing 
     On Error Resume Next 
      Set qwerty = Cell.Precedents 
     On Error GoTo 0 
     If Not qwerty Is Nothing Then 
      MsgBox (Cell.Address) 
     End If 
    Next Cell 
End Sub 
関連する問題