2017-10-09 38 views
0

我有VBA代碼,允許用戶輸入日期並與當前輸入的日期進行比較,以便以合適的顏色填充單元格,我使用選擇病例陳述VBA代碼比較當前數據+使用Case語句時的10天

我需要使單元格填充紅色用戶輸入日期是當天+ 10天。

怎麼辦?

代碼

Private Sub CommandButton1_Click() 

Dim i As Integer 
Dim objDate As Date 


MsgBox (objDate) 

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment' 

    objDate = Date 

    Select Case VBA.CDate(Cells(i, 3)) 

    Case IsEmpty(i) 
     Cells(i, 3).Interior.ColorIndex = 0 

    Case Is < VBA.Date() 
     Cells(i, 3).Interior.Color = vbGreen 

    Case Is = VBA.Date() 
     Cells(i, 3).Interior.Color = vbYellow 

    Case Is > VBA.Date() 
     Cells(i, 3).Interior.Color = vbRed 


    End Select 
Next 

End Sub 
+0

爲什麼在Declar後面有一個'MsgBox'通貨膨脹?它不會包含任何值。日期和數字初始化爲0.因此,它只會顯示00:00:00。 「objDate」的目的是什麼?你不會在代碼中的任何地方使用它。它只會增加開銷,因爲您在循環內爲其分配了相同的值。 – Mahesh

回答

0

這裏是另一種方式來實現這一目標。將兩個日期之間的差異作爲測試表達式,然後檢查每個情況(即它是否小於0,等於它,還是差值大於10)。

If IsEmpty(Cells(i, 3)) Then Exit Sub 
Select Case (VBA.CDate(Cells(i, 3)) - VBA.Date()) 
    Case Is < 0 
     Cells(i, 3).Interior.Color = vbGreen 
    Case 0 
     Cells(i, 3).Interior.Color = vbYellow 
    Case Is > 10 
     Cells(i, 3).Interior.Color = vbRed 
    Case Else 
     'Colour to be applied if the difference is between 1 and 10 (both inclusive) 
End Select 

而且,你的IsEmpty測試不會因爲你是打算工作,因爲你檢查是否i(計數器)爲空。它總是會返回False。此外,單元格已經有一個ColorIndex爲0.因此,除非您的代碼必須檢查以前是否爲非空單元格變空,否則Cells(i, 3).Interior.ColorIndex = 0部分是不必要的。

更新:

作爲一個有趣的實驗,我嘗試過了,看看結果是什麼樣子,下面是截圖:

Macro in action

PS:由於OP沒當提到1和10之間的差異時,我不提及顏色,我將這些單元格顏色設爲黑色:-P