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

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 220607 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Ten artykuł został opublikowany wcześniej pod numerem PL220607
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

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:
http://support.microsoft.com/support/officedev/

Właściwości

Numer ID artykułu: 220607 - Ostatnia weryfikacja: 12 lutego 2004 - Weryfikacja: 5.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Office Standard Edition 2003
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
Słowa kluczowe: 
kbhowto kbautomation KB220607

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com