2015-10-02 33 views
0

更新代碼3如果時間和用戶定義的列聲明

我的新代碼只運行,而無需+ ReceivedTime > 4

我收到這個說法的錯誤消息。錯誤是「運行時錯誤91,對象變量或塊變量未設置」

到目前爲止,過期列僅填充「否」,因爲4小時不包括在內。

我相信Debug.Print是不正確的,因爲我想刪除這個。

+ ReceivedTime > 4對於查明ReceivedTime是否超過4小時似乎不正確?

For Each msg In myCollection 
    ' 
    'check if received time is > than 4 hours 
    If str2 = "A" Then 
     'If str2 = "A" + ReceivedTime > 4 Then 
     Set objProperty = msg.UserProperties(udf(4)) 
     objProperty.value = "Yes"'Set objProperty.str4 = "Yes" 'set Overdue column to say Yes 

    Else 
     Set objProperty = msg.UserProperties(udf(4)) 
     objProperty.value = "No" 'if this is not over 4 hours; display No 
    End If 

    msg.Save 
Next 
End If 
End Sub 

如若小時的語句是類似如下

If str2 = "Create Customer" And ReceivedTime.MailItem = Hour > 4 Then 
    Set objProperty = msg.UserProperties(udf(4)) 
    objProperty.value = "Yes" 

我收到一個運行時錯誤這一點。

_________________________________________________________________________-


原題:

我想在Outlook用戶定義字段列If語句稱爲 「過期」。

如果在UDF 2中選擇了一封電子郵件並且其值爲「A」且標記狀態未標記爲完成;然後有一個4小時的計時器完成這項任務 - 但是任務計時器應該在郵件項目到達郵箱後立即開始。

如果這不是逾期,那麼列「逾期」(UDF4)將保持爲「否」,如果這是過期; > 4小時,此列將被設置爲值「是」

以下是代碼。

以前的代碼

For Each msg In myCollection 

    'check if received time is > than 4 hours 
    If str2 = "A" + ReceivedTime > 4 Then 
     msg.str4 = "Yes" 'set Overdue column to say Yes 
    Else 
     msg.str4 = "No" 
    End If 
    Debug.Print "Set objProperty" 
    If (objProperty Is Nothing) Then 
     Debug.Print "Set objProperty" 
    End If 
End If 
Debug.Print "objProperty.value" 
msg.Save 
Next 
End If 
End Sub 
+0

我試圖重新排列你的邏輯,至少它有一些縮進。我還提出了一些'end if'語句,以使代碼在結構上正確。現在在邏輯上是否正確是另一回事。縮進使得更容易看到「For .. Each」和「if .. end if」塊在哪裏。不知道最初的'If .. end if'是什麼意思? – MiguelH

+0

謝謝..我想檢查標誌狀態是否完成,所以我認爲這將是一個If語句,說如果這被標記爲完成,然後結束如果:什麼都不做......但如果標誌狀態未標記爲完成然後檢查小時數,如果電子郵件設置完成逾期 – Soneeka

+0

好的。我已經把'end if'移到了正確的地方。你的想法是合理的,因爲需要最初的'if'來檢測標記設置。在這種情況下,檢測'If ... end if'塊的標誌圍繞所有其餘的邏輯。只有在未設置標誌時纔會執行此操作。注意我已經將條件更改爲'<> oFlagComplete' – MiguelH

回答

1

應該有相同數量如果和End如果循環內的語句。我沒有得到你在做什麼objProperty,但它不需要說明如果結束如果結構。

For Each msg In myCollection 

    If msg.FlagStatus = olFlagComplete Then 

     'check if received time is > than 4 hours 
     If str2 = "A" + TaskDueDate = ReceivedTime > 4 Then 
      msg.str4 = "Yes" 'set Overdue column to say Yes 
     Else 
      msg.str4 = "No" 
     End If 

     Debug.Print "Set objProperty" 
     'Set objProperty = msg.UserProperties(udf(4)) 

     If (objProperty Is Nothing) Then 
      Debug.Print "Set objProperty" 
      'Set objProperty = msg.UserProperties.Add(udf(4), olKeywords) 
     End If 

    End If 

    Debug.Print "objProperty.value" 
    'objProperty.value = "No"` 

    msg.Save 

Next 

End Sub 
+0

非常感謝你這:)。此代碼運行但未填充「逾期」列 – Soneeka

+0

沒有嘗試填充「逾期」列。您會發現學習諸如Debug.Print等調試技術很有用。看到這裏http://www.cpearson.com/excel/DebuggingVBA.aspx – niton

+0

我會看看,謝謝 – Soneeka