JAK: Automatyzacja korespondencji seryjnej w programie Microsoft Word za pomocą języka Visual Basic

Streszczenie

W tym artykule opisano, jak użyć programu Microsoft Word do utworzenia dokumentu korespondencji seryjnej za pomocą automatyzacji i języka Microsoft Visual Basic.

Więcej informacji

Istnieją dwa sposoby posługiwania się serwerem automatyzacji: użycie późnego powiązania lub wczesnego powiązania. W późnym powiązaniu metody nie są wiązane, dopóki część wykonywalna i serwer automatyzacji nie zostaną zadeklarowane jako Object. We wczesnym powiązaniu aplikacja już w trakcie opracowywania zna dokładny typ obiektu, z którym będzie się komunikować, i może zadeklarować jego obiekty jako określony typ. W tym przykładzie użyto wczesnego powiązania, które jest w większości przypadków uważane za lepsze, ponieważ zapewnia większą wydajność i bezpieczeństwo.

W celu wczesnego powiązania z serwerem automatyzacji trzeba ustawić odwołanie do biblioteki typów tego serwera. W programie Visual Basic można to zrobić w oknie dialogowym References. Aby otworzyć okno dialogowe References, kliknij polecenie References w menu Project. W tym przykładzie przed uruchomieniem kodu trzeba dodać odwołanie do biblioteki typów programu Word.

Budowanie przykładu automatyzacji

  1. Uruchom program Visual Basic i utwórz nowy projekt Standard EXE. Domyślnie zostaje utworzony formularz Form1.
  2. Dodaj przycisk CommandButton do formularza Form1.
  3. W menu Project kliknij polecenie References, aby otworzyć okno dialogowe References.
  4. Zaznacz pozycję Microsoft Word 11.0 Object Library, aby utworzyć odwołanie do biblioteki typów programu Microsoft Office Word 2003. W przypadku programu Word 2002 zaznacz pozycję Microsoft Word 10.0 Object Library. W przypadku programu Word 2000 zaznacz pozycję Microsoft Word 9.0 Object Library. W przypadku programu Word 97 zaznacz pozycję Microsoft Word 8.0 Object Library.
  5. Kliknij przycisk OK, aby zamknąć okno dialogowe References.
  6. W oknie kodu formularza Form1 dodaj następujący kod:
    Option Explicit
    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document

    Private Sub Command1_Click()
    Dim wrdSelection As Word.Selection
    Dim wrdMailMerge As Word.MailMerge
    Dim wrdMergeFields As Word.MailMergeFields

    Dim StrToAdd As String

    ' Tworzy wystąpienie programu Word i uwidacznia je.
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True

    ' Dodaje nowy dokument.

    Set wrdDoc = wrdApp.Documents.Add
    wrdDoc.Select

    Set wrdSelection = wrdApp.Selection
    Set wrdMailMerge = wrdDoc.MailMerge

    ' Tworzy plik danych korespondencji seryjnej.
    CreateMailMergeDataFile

    ' Tworzy ciąg i wstawia go do dokumentu.
    StrToAdd = "Uniwersytet stanowy" & vbCr & _
    "Wydział Inżynierii Elektrycznej"
    wrdSelection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    wrdSelection.TypeText StrToAdd

    InsertLines 4

    ' Wstawia scalane dane.
    wrdSelection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    Set wrdMergeFields = wrdMailMerge.Fields
    wrdMergeFields.Add wrdSelection.Range, "Imię"
    wrdSelection.TypeText " "
    wrdMergeFields.Add wrdSelection.Range, "Nazwisko"
    wrdSelection.TypeParagraph

    wrdMergeFields.Add wrdSelection.Range, "Adres"
    wrdSelection.TypeParagraph
    wrdMergeFields.Add wrdSelection.Range, "Kod pocztowy"

    InsertLines 2

    ' Wyrównuje wiersz do prawej i wstawia pole daty
    ' z bieżącą datą.
    wrdSelection.ParagraphFormat.Alignment = _
    wdAlignParagraphRight
    wrdSelection.InsertDateTime _
    DateTimeFormat:="dddd, MMMM dd, yyyy", _
    InsertAsField:=False

    InsertLines 2

    ' Wyrównuje resztę dokumentu.
    wrdSelection.ParagraphFormat.Alignment = _
    wdAlignParagraphJustify



    wrdSelection.TypeText "Szanowny Panie"
    wrdMergeFields.Add wrdSelection.Range, "/Szanowna Pani"
    wrdSelection.TypeText ","
    InsertLines 2

    ' Tworzy ciąg i wstawia go do dokumentu.
    StrToAdd = "Dziękujemy za prośbę o plan zajęć na następny " & _
    "semestr na Wydziale Inżynierii Elektrycznej. " & _
    "Do tego listu dołączamy broszurę zawierającą " & _
    "spis zajęć w następnym " & _
    "semestrze na naszym Uniwersytecie. " & _
    "W następnym semestrze na Wydziale Inżynierii Elektrycznej " & _
    "będzie kilka nowych wykładów. " & _
    "Wymieniamy je poniżej."
    wrdSelection.TypeText StrToAdd

    InsertLines 2

    ' Wstawia tabelę z 9 wierszami i 4 kolumnami.
    wrdDoc.Tables.Add wrdSelection.Range, NumRows:=9, _
    NumColumns:=4
    With wrdDoc.Tables(1)
    ' Ustawia szerokość kolumn.
    .Columns(1).SetWidth 51, wdAdjustNone
    .Columns(2).SetWidth 170, wdAdjustNone
    .Columns(3).SetWidth 100, wdAdjustNone
    .Columns(4).SetWidth 111, wdAdjustNone
    ' Ustawia cieniowanie pierwszego wiersza na jasnoszare.
    .Rows(1).Cells.Shading.BackgroundPatternColorIndex = _
    wdGray25
    ' Pogrubia pierwszy wiersz.
    .Rows(1).Range.Bold = True
    ' Wyśrodkowuje tekst w komórce (1,1).
    .Cell(1, 1).Range.Paragraphs.Alignment = wdAlignParagraphCenter

    ' Wypełnia danymi każdy wiersz tabeli.
    FillRow wrdDoc, 1, "Numer wykładu", "Nazwa wykładu", "Godziny", _
    "Wykładowca"
    FillRow wrdDoc, 2, "EE220", "Wstęp do elektroniki II", _
    "1:00-2:00 M,W,F", "Dr Mochnacki"
    FillRow wrdDoc, 3, "EE230", "Teoria pola elektromagnetycznego I", _
    "10:00-11:30 T,T", "Dr Lesiak"
    FillRow wrdDoc, 4, "EE300", "Systemy ze sprzężeniem zwrotnym", _
    "9:00-10:00 M,W,F", "Dr Jarocki"
    FillRow wrdDoc, 5, "EE325", "Zaawansowane projektowanie cyfrowe", _
    "9:00-10:30 T,T", "Dr Dumicz"
    FillRow wrdDoc, 6, "EE350", "Zaawansowane systemy komunikacyjne", _
    "9:00-10:30 T,T", "Dr Marczak"
    FillRow wrdDoc, 7, "EE400", "Zaawansowana teoria mikrofal", _
    "1:00-2:30 T,T", "Dr Stępień"
    FillRow wrdDoc, 8, "EE450", "Teoria plazmy", _
    "1:00-2:00 M,W,F", "Dr Janik"

    FillRow wrdDoc, 9, "EE500", "Podstawy projektowania układów VLSI", _
    "3:00-4:00 M,W,F", "Dr Borowik"
    End With

    ' Przechodzi do końca dokumentu.
    wrdApp.Selection.GoTo wdGoToLine, wdGoToLast
    InsertLines 2

    ' Tworzy ciąg i wstawia go do dokumentu.
    StrToAdd = "Dodatkowe informacje dotyczące " & _

    "Wydziału Inżynierii Elektrycznej można " & _
    "znaleźć w witrynie sieci Web pod adresem "
    wrdSelection.TypeText StrToAdd
    ' Wstawia hiperłącze do strony sieci Web.
    wrdSelection.Hyperlinks.Add Anchor:=wrdSelection.Range, _
    Address:="http://www.ee.pw.edu.pl/"
    ' Tworzy ciąg i wstawia go do dokumentu.
    StrToAdd = ". Dziękujemy za zainteresowanie wykładami " & _
    "na Wydziale Inżynierii Elektrycznej " & _
    "Jeżeli ma Pan/Pani inne pytania, " & _
    "prosimy o skontaktowanie się z numerem " & _
    "555-1212." & vbCr & vbCr & _
    "Z poważaniem" & vbCr & vbCr & _
    "Irena Grabowska" & vbCr & _
    "Wydział Inżynierii Elektrycznej" & vbCr
    wrdSelection.TypeText StrToAdd

    ' Wykonuje korespondencję seryjną.
    wrdMailMerge.Destination = wdSendToNewDocument
    wrdMailMerge.Execute False

    ' Zamyka oryginalny formularz dokumentu.
    wrdDoc.Saved = True
    wrdDoc.Close False

    ' Powiadamia użytkownika o zakończeniu.
    MsgBox "Mail Merge Complete.", vbMsgBoxSetForeground

    ' Zwalnia odwołania.
    Set wrdSelection = Nothing
    Set wrdMailMerge = Nothing
    Set wrdMergeFields = Nothing
    Set wrdDoc = Nothing
    Set wrdApp = Nothing

    ' Czyści plik tymczasowy.
    Kill "C:\DataDoc.doc"
    End Sub

    Public Sub InsertLines(LineNum As Integer)
    Dim iCount As Integer

    ' Wstawia puste wiersze w liczbie LineNum.
    For iCount = 1 To LineNum
    wrdApp.Selection.TypeParagraph
    Next iCount
    End Sub

    Public Sub FillRow(Doc As Word.Document, Row As Integer, _
    Text1 As String, Text2 As String, _
    Text3 As String, Text4 As String)

    With Doc.Tables(1)
    ' Wstawia dane do określonej komórki.
    .Cell(Row, 1).Range.InsertAfter Text1
    .Cell(Row, 2).Range.InsertAfter Text2
    .Cell(Row, 3).Range.InsertAfter Text3
    .Cell(Row, 4).Range.InsertAfter Text4
    End With
    End Sub

    Public Sub CreateMailMergeDataFile()
    Dim wrdDataDoc As Word.Document
    Dim iCount As Integer

    ' Tworzy źródło danych w pliku C:\DataDoc.doc, który zawiera dane pól.
    wrdDoc.MailMerge.CreateDataSource Name:="C:\DataDoc.doc", _
    HeaderRecord:="FirstName, LastName, Address, CityStateZip"
    ' Otwiera plik w celu wstawienia danych.
    Set wrdDataDoc = wrdApp.Documents.Open("C:\DataDoc.doc")
    For iCount = 1 To 2
    wrdDataDoc.Tables(1).Rows.Add
    Next iCount
    ' Wypełnia dane.
    FillRow wrdDataDoc, 2, "Marcin", "Flisak", _
    "ul. Różana 83 m. 99", "87-100 Toruń"
    FillRow wrdDataDoc, 3, "Jan", "Kocoń", _
    "ul. Żniwna 142", "09-400 Płock"
    FillRow wrdDataDoc, 4, "Karol", "Woszczak", _
    "ul. Cyrkowa 4", "00-842 Warszawa"
    ' Zapisuje i zamyka plik.
    wrdDataDoc.Save
    wrdDataDoc.Close False
    End Sub
  7. Naciśnij klawisz F5 i kliknij przycisk, aby uruchomić przykład.

Materiały referencyjne

Aby uzyskać więcej informacji dotyczących automatyzacji pakietu Office, odwiedź witrynę pomocy technicznej Microsoft Office Development Support Center pod adresem:
Właściwości

Identyfikator artykułu: 220607 — ostatni przegląd: 11.02.2004 — zmiana: 1

Opinia