Tutorial Compila Solleciti Word con dati da Excel

Stato
Chiusa ad ulteriori risposte.

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
1.709
83
Italy
2013 2019
126
Compila Solleciti Word con dati da Excel

Questo tutorial è in realtà una VARIANTE 3 del precedente tutorial:
Compilare una lettera di Word con dati da Excel (VARIANTE 1 e VARIANTE 2)
che però ho voluto pubblicare a parte per due diversi motivi:
1) non volevo appesantire il (già) lungo precedente tutorial
2) è differente rispetto alle prime due varianti, perché più semplice

Dico subito che anche in questo tutorial ho applicato il metodo Late-Binding così che potrà essere eseguito su qualsiasi versione di Office.
Chi desidera approfondire questo aspetto molto importante dal punto di vista programmatico consiglio di leggere la VARIANTE 2 del mio precedente tutorial.

La differenza sostanziale con le varianti precedenti è che in questa verrà compilata una semplice lettera di testo (quindi niente textbox né tabella) in cui ho inserito dei segnaposto delimitati da coppie di caratteri 'speciali'.
In sostanza, questo progetto è molto più semplice rispetto ai precedenti, ma probabilmente è quello che più si adatta ad esigenze 'reali' di un azienda. Non a caso, come si deduce dal titolo, ho scelto delle lettere di sollecito di pagamento.

Tali lettere le ho scaricate liberamente e gratuitamente dal sito www.Soldioggi.it.
Incluso nel progetto troverete una cartella \Modelli che contiene i file originali:
- Primo-sollecito.docx
- Secondo-sollecito.docx
- Ultimo-sollecito.docx

Nel progetto ho utilizzato solo la lettera Primo-sollecito.docx che ho modificato aggiungendo i segnaposto, delimitati dai caratteri << e >>, esempio <<SpettDitta>>, inoltre ho creato un'altra lettera identica ma che che usa i cancelletti #### come delimitatori. Si noti che nel progetto è anche previsto l'opzione dei caratteri %%%% (che sono stati usati nel precedente tutorial) così da renderlo il più flessibile possibile. Ovviamente possiamo personalizzare il progetto nel caso vengano utilizzati dei delimitatori differenti (penso ad esempio a: [[ e ]], {{ e }} ecc...)
La versione del file che usa il doppio cancelletto ## (inclusa nello zip) si chiama: Primo-sollecito#.docx.

Vediamo il codice che seleziona il delimitatore in base all'opzione scelta sul form:

Visual Basic:
    Select Case True
        Case (OptionButton1.Value = True)
            sDelimL = "<<"
            sDelimR = ">>"
        Case (OptionButton2.Value = True)
            sDelimL = "##"
            sDelimR = "##"
        Case (OptionButton3.Value = True)
            sDelimL = "%%"
            sDelimR = "%%"
    End Select
In sostanza, il codice VBA non fa altro che:
  1. Aprire il file Word, la lettera contenente i segnaposto
  2. Aprire il file Excel, contenente i dati
  3. Sostituisce i segnaposto con i dati,
    con un ciclo per ogni riga e per ogni colonna presenti del database Excel
Visual Basic:
        Rem ------------------------------------------------------------
        Rem Scrivo la riga di dati di Excel nel file Word, colonna per colonna
        Rem ------------------------------------------------------------
        For xCol = 1 To uc
            Set xRange = xWord.ActiveDocument.Range
            xRange.Find.Execute sDelimL & sh.Cells(1, xCol) & sDelimR, , , , , , , , , sh.Cells(i, xCol), True
        Next xCol
        Rem ------------------------------------------------------------
Come nome del file di uscita ho scelto di crearlo usando la coppia <<SpettDitta> e <<NumeroFattura>>:
sFileOutput = sh.Cells(i, 2) & "-" & sh.Cells(i, 6)

così da identificare immediatamente la ditta e la fattura a cui si riferisce il sollecito.


Infine, verrà salvato il file in formato DOCX oppure PDF (a seconda della scelta sul form) nella cartella di \Output.
Dopo di che si ripete tutto il ciclo per la riga successiva di dati (in Excel).
Da notare che il file Word deve essere aperto e chiuso ad ogni ciclo di dati.

Terminata la creazione dei solleciti, ripristino la finestra Excel (che avevo precedentemente nascosta) e chiudo il file con i dati.

CONCLUSIONE
Abbiamo visto che grazie al VBA, con una manciata di codice, possiamo generarci una sorta di stampa unione personalizzata in cui possiamo aggiungere ulteriori caratteristiche come:
Magari qualcuna di queste caratteristiche potrà essere implementata in una prossima variante, vero klingklang @klingklang ? Caffe_rido
 

Allegati

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
1.709
83
Italy
2013 2019
126

Rubik72

Excel/VBA Expert
Supermoderatore
Expert
12 Dicembre 2015
5.254
83
47
Cosenza
Excel 2016
149
Complimenti Giuliano, gran bel Tutorial pieno di vario materiale/soluzioni da studiare, utilizzabili in altri progetti. :applausi:
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
1.709
83
Italy
2013 2019
126
Come segnalato da Rubik72 @Rubik72 (che ringrazio cappello_saluta) ho dimenticato di aggiungere una costante di Word, nel caso si usi il late-binding per cui si riceve un errore se non dichiarata.Ecco la dichiarazione da inserire insieme alle altri costanti:

Const wdDoNotSaveChanges = 0
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.208
113
Como
2011MAC 2016WIN
324
Eccellente anche questo, grazie.
 
Stato
Chiusa ad ulteriori risposte.

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!