2016-10-17 7 views
0

エラーハンドラの使用方法に関するいくつかの問題があります。以下のコードをご覧ください。基本的には、反復で各行の空白のセルを見つけたい場合は、見つかった場合は黄色(44)で色付けし、最後にダイアログボックスを表示します(整数を追加し、1より大きい場合はダイアログボックス)これは別の問題ですエラー処理中にこれをスキップするにはどうすればよいですか?だから私は空のセルを見つけるためにSpecialCells(xlCellTypeBlanks)を使いました。したがって、空白のセルがない場合は、上記の関数に従ってエラーになります。私はどのように適切に私がエラーハンドラを使用しているか分からない。誰でもここに入力してください。Excell VBAのSpecialCell基金のエラーハンドラ

Sub checkblankcells() 
Dim i, j, k, error, error1, error2, lastRow, LastCol As Long 
Dim item, cntr As String 
Dim r As Range 
error2 = 0 
lastRow = Range("D65000").End(xlUp).row 
Application.ScreenUpdating = False 
Sheets("Import").Activate 
Dim counter As Long 
For i = 1 To lastRow 
    With ActiveSheet 
    LastCol = .Cells(i, .Columns.Count).End(xlToLeft).Column 
    End With 
    Set r = Range(Cells(i, 4), Cells(i, LastCol)) 
    On Error GoTo Check1 
    r.SpecialCells(xlCellTypeBlanks).Select 
    Selection.Interior.ColorIndex = 44 
    error2 = error2 + 1 
    Check1: 
    Resume Next 
    Next 
    'Deleting the Blank cell Check Numbers at the end of each row. 
    lastRow = Range("D65000").End(xlUp).row 
    Application.ScreenUpdating = False 
    Sheets("Import").Activate 
    For i = 1 To lastRow 
    With ActiveSheet 
    LastCol = .Cells(i, .Columns.Count).End(xlToLeft).Column 
    End With 
    Cells(i, LastCol).Select 
    Selection.Clear 
    Next 
    If error2 > 0 Then 
    MsgBox "Blank Activities in Yellow. Check Schedules", vbCritical, "TIL" 
Exit Sub 
    End If 
End Sub 

答えて

0

On Error GoTo <label>機能は、任意のGoTo機能のように動作します:エラーが発生したとき、それはちょうど、別の行に、コードの実行者を取ります。いくつかのエラーが発生するたびに値を変更する隠し変数Errがあります。デフォルトでは値が0で、すべてのコードが正常で、コードの実行中にエラーが発生したときの特定のエラーコード値があります。だから、このようにそれを行う代わりに、変数error2を作成する:

Sub checkblankcells() 
Dim i, j, k, lastRow, LastCol As Long 
Dim item, cntr As String 
Dim r As Range 
lastRow = Range("D65000").End(xlUp).Row 
Application.ScreenUpdating = False 
Sheets("Import").Activate 
Dim counter As Long 
For i = 1 To lastRow 
    With ActiveSheet 
     LastCol = .Cells(i, .Columns.Count).End(xlToLeft).Column 
    End With 
    Set r = Range(Cells(i, 4), Cells(i, LastCol)) 
    On Error GoTo Check1 
    r.SpecialCells(xlCellTypeBlanks).Select 
    Selection.Interior.ColorIndex = 44 
Next i 
    'Deleting the Blank cell Check Numbers at the end of each row. 
    lastRow = Range("D65000").End(xlUp).Row 
    Application.ScreenUpdating = False 
    Sheets("Import").Activate 
For i = 1 To lastRow 
    With ActiveSheet 
     LastCol = .Cells(i, .Columns.Count).End(xlToLeft).Column 
    End With 
    Cells(i, LastCol).Select 
    Selection.Clear 
Next i 

Check1: 
    If Err <> 0 Then 
     MsgBox "Blank Activities in Yellow. Check Schedules", vbCritical, "TIL" 
    End If 
End Sub 

私はあなたができると確信しているとしても、カントー、私はあなたのワークブックを持っていないと私は、このコードをテストすることはできませんので、私は何かを忘れてしまったかもしれません変数Errを使用するという考えを参照してください。

+0

私は、エラーハンドラを単純にしておきたいと考えました。空白のセルを色分けして空白セルがない場合は再開し、空白セルの数をカウントすることを心配する必要はありません。すべての反復が完了したら。色を付けて細胞を読むために葯ループを走らせ、条件が満たされればカウンターを入れて報告した。あなたの質問に答えるために、私は色を残しておき、ユーザーはデータをどこに見逃しているか知っています。 – adr0327

+0

申し訳ありませんが、私は迷子になります。このソウルションはあなたのために働いたのですか、あるいは何か問題がありますか? – Limak

0

私はあなたがしたのとまったく同じことをやったのか分かりませんが、これはうまくいきます。私はシートの文脈を理解していないので、空白のセルチェックナンバーの削除は含まず、おそらく重要なものを削除するでしょう - 自分でそれを組み込むことができます。これにより、前にすべての細胞の色が消えてしまいます。私はあなたが他に何が欲しいのか分からなかったので、必要ならば教えてください。がんばろう!

Sub ColourEmpties() 
     Dim myRange As Range 
     Dim x As Long 
     Dim y As Long 

Range("A1").Select 
Selection.End(xlToRight).Select 
x = ActiveCell.Column 

Selection.End(xlDown).Select 
y = ActiveCell.Row 

On Error GoTo Done 

    'clear all color 
    Range(Cells(1, 1), Cells(y, x)).Interior.ColorIndex = xlNone 

    'color only blank cells 
    Range(Cells(1, 1), Cells(y, x)).SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 44 

    MsgBox "Blank Activities in Yellow. Check Schedules" 

Done: 

End Sub 
+0

入力いただきありがとうございますが、私はそれを理解しました。私がやったのは、最初にエラーの再開時に空のセルを色で塗りつぶすことでした。すべての反復が完了したら。色を付けて細胞を読むために葯ループを走らせ、条件が満たされればカウンターを入れて報告した。あなたの質問に答えるために、私は色を残しておき、ユーザーはデータをどこに見逃しているか知っています。 – adr0327

+0

Aha!私はあなたがエラーの数を数えることを望んでいることを理解していませんでした。がんばろう! –

関連する問題