2016-10-17 119 views
0

我在如何使用錯誤處理程序方面遇到了一些問題。請參閱下面的代碼。基本上我想找出迭代中每行的空白單元格,如果找到,用黃色(44)給它們着色,並在最後給出一個對話框(我添加一個整數,如果大於1,它返回一個對話框)這是另一個問題如何在錯誤處理期間跳過此內容?所以我使用SpecialCells(xlCellTypeBlanks)來查找空白單元格。所以當沒有空白單元格時,根據上述函數是錯誤的。我不確定我是如何正確使用錯誤處理程序。任何人都可以在這裏提出意見。Excel中的SpecialCell資金的錯誤處理程序VBA

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

啊哈!我不明白你想要計算的錯誤數量。祝你好運! –