2016-07-18 3 views
2


фон
:
question here обеспечивает дополнительное объяснение.
В этом случае, я хочу знать, почему, если я задаю адрес электронной почты как объект, я получаю сообщение об ошибке «неправильное использование свойства» в MailItem.Sent Property.
Проблема

Добавляя ссылку прогноз на проект:
код с ошибкой недопустимого использования имущества (.Sent):
SetEmailAsObjectCode
MailItem Направлен недопустимое использование

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 вернуть объект. Где, как Outlook.MailItem, является классом, и когда вы делаете Set EmailToSend = olApp.CreateItem(0), хотя переменная EmailToSend вмещает возвращаемый Object, она больше не подвергает объект .Sent. следовательно, ошибка.

использовать это:

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

Я вижу, я вроде как это связано с отсутствующей частью логики ООП, которую я еще не понял, спасибо! – Sgdva

+0

Вот как замечательный мир COM работает. :) – cyboashu

1

Если вы пытаетесь отправить сообщение, вам необходимо позвонить по методу MailItem.Send. Если вы пытаетесь выяснить, является ли сообщение черновиком или отправленным, вы читаете свойство MailItem.Sent.

Примечание "d" против "t".

+0

Я проверяю, если сообщение было отправлено или нет; это достигается _ ** SetCreateItemObjectCode ** _, но я получаю сообщение об ошибке «недопустимое использование свойства» с _ ** SetEmailAsObjectCode ** _, я хочу знать, почему, поскольку оба они, вероятно, будут использовать один и тот же объект в С Заявление – Sgdva

+0

правильным синтаксисом будет «если EmailToSend.Sent then ...». Однако в вашем случае сообщение создается с помощью CreateItem, конечно, оно будет неактивным. –

+0

С тех пор, как С, с самого начала, я не вижу логики, почему добавить его снова, не могли бы вы объяснить, почему? 'С помощью EmailToSend' ....' EmailToSend.Sent' ... 'End With'? – Sgdva

Смежные вопросы