Udostępnij za pośrednictwem


Makro VBA, które używa danych z dokumentu programu Word i skoroszytu programu Excel do wysyłania wiadomości z programu Outlook

Podsumowanie

W tym artykule opisano makro programu Visual Basic for Applications, które używa danych z dokumentu programu Microsoft Word i skoroszytu programu Microsoft Excel do wysyłania komunikatów z programu Microsoft Outlook.

Więcej informacji

Ważne

Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost ani dorozumianej, w tym także, ale nie tylko, dorozumianej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu, jak działa określona procedura, ale nie będą modyfikować tych przykładów ani dodawać żadnych funkcji i konstruować nowych procedur w celu dostosowania ich do określonych potrzeb użytkownika.

W poniższym przykładzie przyjęto założenie, że w arkuszu znajdują się dwie zdefiniowane nazwy:

  • Pierwsza zdefiniowana nazwa, subjectcell, odwołuje się do komórki zawierającej wiersz tematu komunikatu (na przykład "To jest komunikat testowy).
  • Druga zdefiniowana nazwa, tolist, odwołuje się do pierwszej komórki na liście poziomej zawierającej listę adresatów (na przykład "John Doe", "Jane Doe" itd.).

Musisz również mieć dokument programu Microsoft Word. Tekst tego dokumentu jest używany przez makro jako treść wiadomości e-mail.

Sub SendOutlookMessages()'Dimension variables.
    Dim OL As Object, MailSendItem As Object
    Dim W As Object
    Dim MsgTxt As String, SendFile As String
    Dim ToRangeCounter As Variant
    
    'Identifies Word file to send
    SendFile = Application.GetOpenFilename(Title:="Select MS Word " & _
    "file to mail, then click 'Open'", buttontext:="Send", _
    MultiSelect:=False)'Starts Word session
    Set W = GetObject(SendFile)'Pulls text from file for message body
    MsgTxt = W.Range(Start:=W.Paragraphs(1).Range.Start, _
    End:=W.Paragraphs(W.Paragraphs.Count).Range.End)'Ends Word session
    Set W = Nothing
    
    'Starts Outlook session
    Set OL = CreateObject("Outlook.Application")
    Set MailSendItem = OL.CreateItem(olMailItem)
    
    ToRangeCounter = 0
    
    'Identifies number of recipients for To list.
    For Each xCell In ActiveSheet.Range(Range("tolist"), _
    Range("tolist").End(xlToRight))
    ToRangeCounter = ToRangeCounter + 1
    Next xCell
    
    If ToRangeCounter = 256 Then ToRangeCounter = 1
    
    'Creates message
    With MailSendItem
    .Subject = ActiveSheet.Range("subjectcell").Text
    .Body = MsgTxt
    
    'Creates "To" list
    For Each xRecipient In Range("tolist").Resize(1, ToRangeCounter)
    RecipientList = RecipientList & ";" & xRecipient
    Next xRecipient
    
    .To = RecipientList
    .Send
    End With
    
    'Ends Outlook session
    Set OL = Nothing
    
End Sub