2009-10-03 7 views
1

Je développe une application de base de données dans laquelle les utilisateurs ouvrent un document de modèle Word et le fusionnent avec les enregistrements de base de données. J'ai réussi à écrire du code qui le fait pour un enregistrement où j'ouvre un fichier modèle et remplace les éléments du document modèle par des données DB. J'ai essayé d'ouvrir le document modèle plusieurs fois (une fois pour chaque enregistrement DB), mais cela ouvre une boîte de dialogue Word invitant l'utilisateur à ouvrir le second document et les documents suivants en lecture seule (pas très élégant) et j'obtiens un Word Normal.dotm erreur lorsque chacun des documents est fermé. Ainsi, comment puis-je utiliser un document modèle pour créer plusieurs documents Word en même temps. Deux options comme je les vois sont: 1) Enregistrer un document dans un nouveau nom avant de créer d'autres documents ou 2) Avoir un document avec plusieurs pages (un par enregistrement DB) mais pour cela je devrais copier et coller le document modèle contenu une fois pour chaque enregistrement, mais je ne vois pas comment le faire. S'il vous plaît gardez à l'esprit que je suis expérimenté dans la programmation de base de données et seulement une connaissance rudimentaire de VB pour les applications, plus vous serez explicite, plus il sera utile.Ouverture de plusieurs copies du document de modèle Word à l'aide de VBA pour les applications

Merci d'avance.

+0

Pourquoi ne pas mailmerge? – Fionnuala

+1

Selon la boîte de dialogue que vous décrivez, il semble que vous ouvriez le modèle Word au lieu de l'utiliser comme base pour créer un nouveau document. Pouvez-vous poster le code que vous utilisez pour ouvrir le modèle? – dendarii

Répondre

1

Cette fonction créera un nouveau document pour chaque enregistrement basé sur un modèle spécifié. J'utilise un signet prédéfini dans le modèle Word pour ajouter des données à partir de la base de données. Ce sous-programme serait exécuté dans la base de données.

Public Sub CreateDocs() 

    Dim oWord As Word.Application 
    Set oWord = New Word.Application 
    Dim oDocument As Word.Document 
    Dim oDatabase As DAO.Database 
    Set oDatabase = CurrentDb 

    ' where to save our files 
    Dim strDocPath As String 
    strDocPath = CurrentProject.Path & "\" 

    ' preset bookmark in template 
    Dim oBookMark As Word.Bookmark 

    ' query with records 
    Dim oRecordset As DAO.Recordset 
    Set oRecordset = oDatabase.OpenRecordset("qrySomeQuery") 

    ' template file 
    Dim strTemplateName As String 
    strTemplateName = "C:\users\you\Documents\Doc1.dotx" 

    ' hide Word 
    oWord.WindowState = wdWindowStateMinimize 
    oWord.Visible = False 

    While Not oRecordset.EOF 
     ' create new document from template 
     Set oDocument = oWord.Documents.Add(strTemplatePath, False, , False) 

     ' get reference to bookmark in template 
     Set oBookMark = oDocument.Bookmarks("bkmkSomePlace") 

     ' add our data 
     oBookMark.Range.Text = oRecordset.Fields(0).Value & vbTab & oRecordset.Fields(1).Value 

     ' Save and close 
     ' Saving using one of the query fields that is unique 
     oDocument.SaveAs strDocPath & "generatedFile" & oRecordset.Fields(0).Value, wdFormatDocumentDefault 
     oDocument.Close 

     ' next record 
     oRecordset.MoveNext 
    Wend 

    oWord.Close 
    Set oWord = Nothing 
    If Not oRecordset Is Nothing Then oRecordset.Close 
    Set oRecordset = Nothing 
    oDatabase.Close 
    Set oDatabase = Nothing 
    Set oDocument = Nothing 
End Sub 
Questions connexes