Приложение Outlook 2007+ Cast.ActiveExplorer.Selection.Item в Outlook.mailItem, когда TypeOf Item = Outlook.mailItem - PullRequest
1 голос
/ 22 марта 2012

возьмите следующий внешний вид vba:

Sub FileEmails()
    Dim myOlExp As Outlook.Explorer
    Dim myOlSel As Outlook.Selection

    Set myOlExp = Application.ActiveExplorer
    Set myOlSel = myOlExp.Selection

    If myOlSel.Count = 0 Then
        MsgBox "No objects selected."
    Else
        For Each SelectedItem In myOlSel
            If (TypeOf SelectedItem Is Outlook.mailItem) Then
                Dim mailItem As Outlook.mailItem
                Set mailItem = SelectedItem
                itemMessage = "The item is an e-mail message. The subject is " & mailItem.Subject & "."
                mailItem.Display (False)
            ElseIf (TypeOf SelectedItem Is Outlook.contactItem) Then
                Dim contactItem As Outlook.contactItem
                Set contactItem = SelectedItem
                itemMessage = "The item is a contact. The full name is " & contactItem.Subject & "."
                contactItem.Display (False)
            ElseIf (TypeOf SelectedItem Is Outlook.AppointmentItem) Then
                Dim apptItem As Outlook.AppointmentItem
                Set apptItem = SelectedItem
                itemMessage = "The item is an appointment." & apptItem.Subject & "."
            ElseIf (TypeOf SelectedItem Is Outlook.taskItem) Then
                Dim taskItem As Outlook.taskItem
                Set taskItem = SelectedItem
                itemMessage = "The item is a task. The body is " & taskItem.Body & "."
            ElseIf (TypeOf SelectedItem Is Outlook.meetingItem) Then
                Dim meetingItem As Outlook.meetingItem
                Set meetingItem = SelectedItem
                itemMessage = "The item is a meeting item. The subject is " & meetingItem.Subject & "."
            End If
        Next SelectedItem

        expMessage = expMessage & itemMessage
        MsgBox (expMessage)
    End If

End Sub

Если я выберу несколько элементов в папке «Входящие» и выполню этот код, он успешно распознает, что SelectedItem является Outlook.mailItem, но я получаю следующую ошибку, когдапопытка привести SelectedItem к Outlook.MailItem (даже если аргумент typeof вернул true):

Object variable or with block variable not set

Как я могу выполнить это приведение?Я основал этот код на следующем примере .net (который использует TryCast):

http://msdn.microsoft.com/en-us/library/ms268994.aspx

1 Ответ

1 голос
/ 23 марта 2012

Я не проверял ваш код, но вот пара моментов, которые могут помочь.

Outlook VBA отличается от VB.NET. VB.NET - это новое поколение, в котором есть много улучшений.

Одним из таких улучшений является то, что вы можете объявлять переменные на уровне блоков. Для VBA переменные могут быть объявлены только на уровне модуля или процедуры. Я не знаю, что произойдет, если вы повторно объявите переменные внутри цикла, поэтому переместите все операторы Dim наверх.

VB.NET не использует SET. VBA требует SET для объектов, поэтому попробуйте Set mailItem = SelectedItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...