Comment automatiser Microsoft Word à l’aide de Visual Basic pour créer un document
Résumé
Cet article pas à pas explique comment créer un document dans Word à l’aide d’Automation à partir de Visual Basic.
Exemple de code
L’exemple de code de cet article montre comment effectuer les opérations suivantes :
- Insérer des paragraphes avec du texte et une mise en forme.
- Parcourez et modifiez différentes plages dans un document.
- Insérez des tables, mettez en forme des tables et remplissez les tables avec des données.
- Ajoutez un graphique.
Pour créer un document Word à l’aide d’Automation à partir de Visual Basic, procédez comme suit :
En Visual Basic, créez un projet EXE standard. Form1 est créé par défaut.
Dans le menu Projet , cliquez sur Références, sur l’une des optionssuivantes, puis sur OK :
- Pour Office Word 2007, cliquez sur Bibliothèque d’objets Microsoft Word 12.0.
- Pour Word 2003, cliquez sur Bibliothèque d’objets Microsoft Word 11.0.
- Pour Word 2002, cliquez sur Bibliothèque d’objets Microsoft Word 10.0.
- Pour Word 2000, cliquez sur Bibliothèque d’objets Microsoft Word 9.0.
Ajoutez un contrôle CommandButton à Form1.
Ajoutez le code suivant à l’événement Click pour Command1 :
Dim oWord As Word.Application Dim oDoc As Word.Document Dim oTable As Word.Table Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph Dim oRng As Word.Range Dim oShape As Word.InlineShape Dim oChart As Object Dim Pos as Double 'Start Word and open the document template. Set oWord = CreateObject("Word.Application") oWord.Visible = True Set oDoc = oWord.Documents.Add 'Insert a paragraph at the beginning of the document. Set oPara1 = oDoc.Content.Paragraphs.Add oPara1.Range.Text = "Heading 1" oPara1.Range.Font.Bold = True oPara1.Format.SpaceAfter = 24 '24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter 'Insert a paragraph at the end of the document. '** \endofdoc is a predefined bookmark. Set oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range) oPara2.Range.Text = "Heading 2" oPara2.Format.SpaceAfter = 6 oPara2.Range.InsertParagraphAfter 'Insert another paragraph. Set oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range) oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:" oPara3.Range.Font.Bold = False oPara3.Format.SpaceAfter = 24 oPara3.Range.InsertParagraphAfter 'Insert a 3 x 5 table, fill it with data and make the first row 'bold,italic. Dim r As Integer, c As Integer Set oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 3, 5) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 3 For c = 1 To 5 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Rows(1).Range.Font.Bold = True oTable.Rows(1).Range.Font.Italic = True 'Add some text after the table. 'oTable.Range.InsertParagraphAfter Set oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks("\endofdoc").Range) oPara4.Range.InsertParagraphBefore oPara4.Range.Text = "And here's another table:" oPara4.Format.SpaceAfter = 24 oPara4.Range.InsertParagraphAfter 'Insert a 5 x 2 table, fill it with data and change the column widths. Set oTable = oDoc.Tables.Add(oDoc.Bookmarks("\endofdoc").Range, 5, 2) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 5 For c = 1 To 2 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Columns(1).Width = oWord.InchesToPoints(2) 'Change width of columns 1 & 2. oTable.Columns(2).Width = oWord.InchesToPoints(3) 'Keep inserting text. When you get to 7 inches from top of the 'document, insert a hard page break. Pos = oWord.InchesToPoints(7) oDoc.Bookmarks("\endofdoc").Range.InsertParagraphAfter Do Set oRng = oDoc.Bookmarks("\endofdoc").Range oRng.ParagraphFormat.SpaceAfter = 6 oRng.InsertAfter "A line of text" oRng.InsertParagraphAfter Loop While Pos >= oRng.Information(wdVerticalPositionRelativeToPage) oRng.Collapse (wdCollapseEnd) oRng.InsertBreak wdPageBreak oRng.Collapse wdCollapseEnd oRng.InsertAfter "We're now on page 2. Here's my chart:" oRng.InsertParagraphAfter 'Insert a chart and change the chart. Set oShape = oDoc.Bookmarks("\endofdoc").Range.InlineShapes.AddOLEObject( _ ClassType:="MSGraph.Chart.8", FileName _ :="", LinkToFile:=False, DisplayAsIcon:=False) Set oChart = oShape.OLEFormat.Object oChart.charttype = 4 'xlLine = 4 oChart.Application.Update oChart.Application.Quit '... If desired, you can proceed from here using the Microsoft Graph 'Object model on the oChart object to make additional changes to the 'chart. oShape.Width = oWord.InchesToPoints(6.25) oShape.Height = oWord.InchesToPoints(3.57) 'Add text after the chart. Set oRng = oDoc.Bookmarks("\endofdoc").Range oRng.InsertParagraphAfter oRng.InsertAfter "THE END." 'All done. Unload this form. Unload Me
Appuyez sur F5 pour exécuter le programme, puis cliquez sur Command1.
Une fois le code terminé, examinez le document qui a été créé pour vous. Le document contient deux pages de paragraphes mis en forme, des tableaux et un graphique.
Utiliser un modèle
Si vous utilisez Automation pour créer des documents qui sont tous dans un format commun, vous pouvez tirer parti du démarrage du processus avec un nouveau document basé sur un modèle préformaté. L’utilisation d’un modèle avec votre client Word Automation présente deux avantages significatifs par rapport à la création d’un document à partir de rien :
- Vous pouvez avoir un meilleur contrôle sur la mise en forme et le placement des objets dans vos documents.
- Vous pouvez générer vos documents avec moins de code.
À l’aide d’un modèle, vous pouvez ajuster le positionnement des tableaux, paragraphes et autres objets dans le document, ainsi qu’inclure une mise en forme sur ces objets. À l’aide d’Automation, vous pouvez créer un document basé sur votre modèle avec du code tel que le suivant :
oWord.Documents.Add "<Path to your template>\MyTemplate.dot"
Dans votre modèle, vous pouvez définir des signets afin que votre client Automation puisse remplir du texte variable à un emplacement spécifique du document, comme suit :
oDoc.Bookmarks("MyBookmark").Range.Text = "Some Text Here"
Un autre avantage de l’utilisation d’un modèle est que vous pouvez créer et stocker des styles de mise en forme que vous souhaitez appliquer au moment de l’exécution, comme suit :
oDoc.Bookmarks("MyBookmark").Range.Style = "MyStyle"
ou
oWord.Selection.Style = "MyStyle"
References
Pour plus d’informations, cliquez sur les numéros d’article ci-dessous pour afficher les articles de la Base de connaissances Microsoft :
285332 Comment automatiser Word 2002 avec Visual Basic pour créer une fusion et publipostage
Développement Microsoft Office avec Visual Studio
(c) Microsoft Corporation 2001, Tous droits réservés. Contributions de Lori B. Turner, Microsoft Corporation.