Sviluppare funzionalita su Microsoft Office con VBA Mailmerge con dati da SQL

LoginRegistrati
Stai vedendo 1 articolo (di 1 totali)
  • Autore
    Articoli
  • #28135 Risposta

    roberto21
    Partecipante
      2 pts

      Nel mio applicativo access, uso questo codice per stampare una lettera, prendendo i dati da una tabella excel.

      ...
      filepath = ThisWorkbook.Path
      
      
      With WordApp
          .Visible = True
          Set WordDoc = .Documents.Open(filepath & "\LetteraNuoviSoci.docx")
      End With
      'MailMerge selected records from table to Word document
      With WordApp
          .ActiveDocument.MailMerge.OpenDataSource Name:=filepath & "\" & ThisWorkbook.Name, _
              ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
              AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
              WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
              Format:=wdOpenFormatAuto, _
              SQLStatement:="SELECT * FROM rangesoci WHERE [Numero Tessera] =" & numerotessera, SQLStatement1:="", _
              SubType:=wdMergeSubTypeAccess
          With .ActiveDocument.MailMerge
              .Destination = wdSendToPrinter
              .SuppressBlankLines = True
                            
              With .DataSource
                  .FirstRecord = wdDefaultFirstRecord
                  .LastRecord = wdDefaultLastRecord
              End With
              .Execute Pause:=False
          End With
                 
      End With
      
      
      WordDoc.Close SaveChanges:=False
      WordApp.Quit

      Questo codice non sarà il massimo dell'eleganza, ma funziona.

      Per una serie di motivi, sto spostando la tabella excel in sqlexpress, con un link nell'applicazione access. Essendo più ignorante di quanto credessi, non riesco a creare la connessione per il mailmerge. Ho provato con qualche suggerimento preso qui e lì in Internet, ma sospetto che mi manchi qualcosa di essenziale e che gli altri danno per scontato. Questo è il mio ultimo tentativo. Di solito, word si impianta con "the database has been put by user admin in a state that prevents it from being opened or locked", ma c'è anche un misteriopso "cannot find c:\testhyp2.mdb", e comunque la connessione non viene aperta. Qualche idea? Anche un suggerimento su che cosa dovrei documentarmi sarà apprezzata. Grazie

      Set WordApp = New Word.Application
      filepath = CurrentProject.Path
      Debug.Print filepath, Numerotessera
      With WordApp
          .Visible = True
          Set WordDoc = .Documents.Open(filepath & "\LetteraNuoviSoci.docx")
      End With
      'MailMerge selected records from table to Word document
      With WordApp
      
      
          With .ActiveDocument.MailMerge
              .MainDocumentType = wdFormLetters
              strConnection = "Provider=SQLNCLI11;Server = \\DESKTOP-FMBJ0FJ\SQLEXPRESS;" & _
                      "AttachDbFilename=|DataDirectory|RicevuteCPNVersion2.mdf" & _
                     "Database=RicevuteCPNVersion2;Trusted_Connection=yes;"
               .OpenDataSource Name:="c:\testhyp2\RicevuteConPrimaNotaFE.accdb", _
                      Connection:=strConnection, _
                      SQLStatement:="SELECT * FROM dbo.LibroSoci WHERE [Numero Tessera] =" & Numerotessera
              .Destination = wdSendToPrinter
              .SuppressBlankLines = True
              
       _
      
      
              With .DataSource
                  .FirstRecord = wdDefaultFirstRecord
                  .LastRecord = wdDefaultLastRecord
              End With
              .Execute Pause:=False
          End With
                 
      End With
      
      
      WordDoc.Close SaveChanges:=False
      WordApp.Quit
    LoginRegistrati
    Stai vedendo 1 articolo (di 1 totali)
    Rispondi a: Mailmerge con dati da SQL
    Gli allegati sono permessi solo ad utenti REGISTRATI
    Le tue informazioni:



    vecchio frac - 2750 risposte

    albatros54
    albatros54 - 1009 risposte

    patel
    patel - 976 risposte

    Marius44
    Marius44 - 848 risposte

    Luca73
    Luca73 - 720 risposte