2016-07-18 71 views
2


背景

question here提供了進一步的解釋。
在這種情況下,我想知道爲什麼如果我將電子郵件設置爲對象,則在MailItem.Sent Property中出現「無效使用財產」的錯誤。
問題

通過添加展望參考項目:
代碼錯誤無效使用性質(.Sent)的:
SetEmailAsObjectCode
MailItem Sent Invalid Use

Dim olApp As Object: Set olApp = CreateObject("Outlook.Application") 
Dim EmailToSend As Object 
Set EmailToSend = Nothing 
    Set EmailToSend = olApp.CreateItem(0) 
    With EmailToSend 
    On Error Resume Next 
    Call .Sent 
    If Err.Number = 0 Then ' 4. If Err.Number = 0 
    Cells(1,1).Value = "ErrorOutLookTimeout: Email not sent" 
    Else ' 4. If Err.Number = 0 
    Cells(1,1).Value = "Email Sent!" 
    End If ' 4. If Err.Number = 0 
    On Error GoTo 0 
    End With 

工作代碼:
SetCreateItemObjectCode

Dim olApp As Outlook.Application: Set olApp = CreateObject("Outlook.Application") 
    Dim EmailToSend As Outlook.MailItem 
    Set EmailToSend = Nothing 
     Set EmailToSend = olApp.CreateItem(0) 
     With olApp.CreateItem(0) 
     On Error Resume Next 
     Call .Sent 
     If Err.Number = 0 Then ' 4. If Err.Number = 0 
     Cells(1, 1).Value = "ErrorOutLookTimeout: Email not sent" 
     Else ' 4. If Err.Number = 0 
     Cells(1, 1).Value = "Email Sent!" 
     End If ' 4. If Err.Number = 0 
     On Error GoTo 0 
     End With 

正如你可能會注意到,而不是引用到電子郵件對象創建它的設置馬上
問:

爲什麼代碼SetCreateItemObjectCode工程和SetEmailAsObjectCode是不?

回答

4

CreateItem返回一個Object。 Outlook.MailItem本身就是一個類,當你做Set EmailToSend = olApp.CreateItem(0)時,儘管EmailToSend變量可以容納返回的Object,但它不再暴露.Sent屬性。因此錯誤。

使用本:

With EmailToSend 
On Error Resume Next 
Call .ItemProperties.Item("Sent") 
+0

我明白了,我認爲它與OOP邏輯的缺失部分有關,我還沒有完全理解,謝謝! – Sgdva

+0

這就是COM的精彩世界的工作原理。 :) – cyboashu

1

如果您嘗試發送消息,則需要調用MailItem.Send方法。如果您試圖查明郵件是草稿還是發送郵件,您可以閱讀MailItem.Sent屬性。

注意「d」與「t」。

+0

如果消息被髮送或沒有我檢查;這是通過_ ** SetCreateItemObjectCode ** _實現的,但是,我用_ ** SetEmailAsObjectCode ** _得到了一個錯誤「invalid use of property」,我想知道爲什麼,因爲它們都可能使用同一個對象有聲明 – Sgdva

+0

正確的語法將是「如果EmailToSend.Sent然後...」。然而,就你的情況而言,該消息只是使用CreateItem創建的,當然它將不發送。 –

+0

由於從一開始我就沒有看到邏輯爲什麼要再次添加它,你能否解釋爲什麼? '用EmailToSend' ....'EmailToSend.Sent' ...'用'結束'? – Sgdva