2017-06-29 15 views
0

大きくない延滞日...この上種類の不一致VBA VBAでまだハイライト

Sub CompareDates() 

Dim dueDate As Date, sht As Worksheet, i As Long 

For Each sht In ThisWorkbook.Sheets 

For i = 1 To CountMyRows(sht.Name) 
    dueDate = CDate(sht.Range("E" & i)) 
    If dueDate > Date Then 
     sht.Range("E" & i).Interior.ColorIndex = 5 
    End If 
Next i 

Next sht 

End Sub 

取得型の不一致:

dueDate = CDate(sht.Range("E" & i)) 

私は私が誰かを持っている時に、これが機能しない理由はわかりませんそうでなければテストして、それをテストします。

編集:私は、エラーを取り除く持っているが、コードはすべての期限切れタスクを仕事とハイライト表示されません...

+1

SHT 'の値がどのようなものです。 Range( "E"&i) ' –

+0

私は、特定のセルに'#DIV/0! 'や'#NA'などの数式エラーがあると感じています –

+0

@SiddharthRoutもう一度やります!すべてのシートのE列のすべての列を検索するマクロにしたいと思ったので列5であるはずでした –

答えて

0

あなたはエラーを防ぐためにCDateを使用する前にIsDateを使用することができます。 CDateは、実際に日付に変換できる値を渡す場合にのみ機能します。

あなたは、このようにコードを変更することができます。

Option Explicit 

Sub CompareDates() 

    Dim dueDate As Date, sht As Worksheet, i As Long 

    For Each sht In ThisWorkbook.Sheets 

     For i = 1 To CountMyRows(sht.Name) 
      If IsDate(sht.Range("E" & i).Value) Then '<-- check if value is a date 
       dueDate = CDate(sht.Range("E" & i)) 
       If dueDate > Date Then 
        sht.Range("E" & i).Interior.ColorIndex = 5 
       End If 
      End If 
     Next i 

    Next sht 

End Sub 

例 - それは2017年7月13日のようなもののために動作しません注意してください。

enter image description here

+0

Hiya @RobinMackenzieこれはおかげさまでまだ延期日を強調表示していません –

+0

今日はあなたの日付が今日よりも大きいですか?それは私のために働く... –

+0

聖モルイ....ありがとう!うわ..どのように愚か!どうもありがとうございます –

0

それはのための「ループ内で毎回失敗していますか?

dueDate = CDate(sht.Range("E" & i)) 

は、たとえば、sht.Range("E" & i))がテキストを返すと失敗します。

最初のような変数にsht.Range("E" & i))を割り当てよう:そう、あなたがより良い進行状況を追跡することができます

For i = 1 To 5 

    c_date = sht.Range("E" & i) 
    dueDate = CDate(c_date) 
    If dueDate > Date Then 
     sht.Range("E" & i).Interior.ColorIndex = 5 
    End If 
Next I 

- 多分あなたの基礎となるデータは、このような比較のために有効ではありません(それは日付ではありません)

+0

ねえ!それはまだタイプミスマッチです。 dueDate = CDate(c_date)@SławomirMytych –

関連する問題