VBA: обработка нескольких элементов сообщения - PullRequest
1 голос
/ 01 июля 2011

Я попытался выяснить, как обрабатывать несколько объектов сообщений программно с помощью следующего фрагмента, но у меня возникли проблемы с ним.В конечном итоге я хочу отправить сообщение списку получателей в файле электронной таблицы.Какие объекты и методы будут выполнять работу самым простым способом?

    Dim w As Outlook.Application
    Dim wInbox As Outlook.MAPIFolder
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient

    Dim count, x, msgnum As Integer
' Handle Microsoft outlook
    Set w = GetObject(, "Outlook.Application")
    If Err = ERR_APP_NOTRUNNING Then                    ' Open new instance if none is running
      Set w = New Outlook.Application
      wInbox = w.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    End If

    'Count number of emails required
    count = Cells(1, 2).End(xlDown).Row
    msgnum = wInbox.Items.count
    For x = 1 To count
        Set objOutlookMsg = w.CreateItem(olMailItem)
        msgnum = wInbox.Items.count
    Next x

------- Редактировать --------- Что если я обработаю код, подобный этому?*

  Dim w As Outlook.Application
    Dim wInbox As Outlook.MAPIFolder
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient

    Dim count, x, msgnum As Integer
' Handle Microsoft outlook
    Set w = GetObject(, "Outlook.Application")
    If Err = ERR_APP_NOTRUNNING Then                    ' Open new instance if none is running
      Set w = New Outlook.Application
    End If
    wInbox = w.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

    'Count number of emails required
    count = Cells(1, 2).End(xlDown).Row
    msgnum = wInbox.Items.count
    For x = 1 To count
        Set objOutlookMsg = w.CreateItem(olMailItem)
        msgnum = wInbox.Items.count
    Next x

1 Ответ

2 голосов
/ 02 июля 2011

Это сработало для меня ...

Sub TestOutlookSend()

    Dim w As Outlook.Application
    Dim wInbox As Outlook.MAPIFolder
    Dim objOutlookMsg As Outlook.MailItem
    Dim rngAddr As Range, recip As String

        Set rngAddr = ThisWorkbook.Sheets("Sheet1").Range("A2")

        Set w = GetObject(, "Outlook.Application")
        Set wInbox = w.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

        Do While rngAddr.Value <> ""
            recip = rngAddr.Value

            Set objOutlookMsg = w.CreateItem(olMailItem)
            With objOutlookMsg
                .To = recip
                .Subject = "Hello " & recip
                .Body = "A message for" & recip
                .Send
            End With

            Set rngAddr = rngAddr.Offset(1, 0)
        Loop

End Sub
...