Stampa unione e VBA: creare PDF (e tenere traccia di ciò che si è stampato) – parte 3

 pdfcreate

Si tratta in sostanza di una “piccola” evoluzione di due precedenti tutorial il cui scopo è quello di consentire di tenere traccia di quali record sono stati elaborati dalla stampa unione in passato.

Questo utile “stratagemma” consente dunque di inserire nuovi record alla base di dati senza dover cancellare i precedenti.

Ecco il codice da me utilizzato nellesempio:

Sub UpdateSent(TheRow As Long)
'creo la connessione al DB Access
Dim conn As ADODB.Connection
   Dim NumOfRec As Integer
   Dim strPath As String
strPath = ActiveDocument.Path & "\stampaunione.mdb"
   

   Set conn = New ADODB.Connection

   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath

   conn.Execute "UPDATE Aziende_Ricevuta SET sent =  1" & _
      " WHERE Id = " & TheRow, NumOfRec, adExecuteNoRecords

   
   conn.Close
   Set conn = Nothing
End Sub

E, per quanto riguarda la macro vera e propria:

Sub Stampa_PDF()
 
    Dim fd As FileDialog
    'Crea un oggetto FileDialog per scegliere la cartella in cui salvare i file
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    With fd
   'Usa il metodo Show per mostrare la finestra di dialogo e restituire l'azione dell'utente
     If .Show = -1 Then
        For Each vrtSelectedItem In .SelectedItems
   'vrtSelectedItem è una stringa che contiene l'indirizzo di ogni elemento selezionato.
   'E' possibile usare qualsiasi funzione di I/O sui file utilizzando questo indirizzo.
            SelectedPath = vrtSelectedItem
        Next vrtSelectedItem
        Else
            MsgBox ("Nessuna cartella è stata selezionata.")
            Exit Sub
     End If
    End With
  'Imposta la variabile oggetto a Nothing
   Set fd = Nothing
   Application.ScreenUpdating = False
   maindoc = ActiveDocument.Name
ChangeFileOpenDirectory SelectedPath
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord
'Quanti record ci sono?
hmrecords = ActiveDocument.MailMerge.DataSource.ActiveRecord
'posizionati sul primo record
ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord
    For i = 1 To hmrecords + 1
      With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
            With .DataSource
              .FirstRecord = i
              .LastRecord = i
              .ActiveRecord = i
'Utilizza alcuni campi del file sorgente per impostare il nome del file pdf
'IMPORTANTE: tali campi vanno personalizzati in base a quelli effettivamente
'presenti nella sorgente dati
              docName = .DataFields("anno").Value & "_" & .DataFields("Modulo").Value & "_" & .DataFields("Broker").Value & "_" & .DataFields("Cognome").Value & "_" & .DataFields("Numero").Value & ".pdf"
              TheRow = .DataFields("ID").Value
              sent = .DataFields("sent").Value
              
'se il record è flaggato salta la stampa

              If sent = 1 Then GoTo 100
            End With
        .Execute Pause:=False
        Application.ScreenUpdating = False
     End With
'crea il PDF
        ActiveDocument.ExportAsFixedFormat OutputFileName:=docName, _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
        ActiveWindow.Close SaveChanges:=False
'vai alla sub che flagga a "vero" il record appena processato
        UpdateSent (TheRow)
100    'se la riga non va stampata salta qui
   Next i
Application.ScreenUpdating = True
End Sub

il tutorial attuale (3): [mx_youtuber type="video" id="5n5NuF9LCN0"]

I due tutorial precedenti. qui il primo (1): [mx_youtuber type="video" id="izlQ9osMfz4"]

Il secondo (2): [mx_youtuber type="video" id="uYugLf4vv7U"]

No thoughts on “Stampa unione e VBA: creare PDF (e tenere traccia di ciò che si è stampato) – parte 3”