› Excel e gli applicativi Microsoft Office › Macro per Esportare Dati Selezionati su Word
-
AutoreArticoli
-
Buongiorno,
Ho bisogno di copiare il contenuto di alcune celle excell all'interno di un file word.
Mi spiego meglio:
- ho già un file excel con l'anagrafica di circa 600 pazienti (per ogni riga ho: nome e cognome, data di nascita, città, provincia, incarico/mansione);
- mi servirebbe una macro che mi modifica un file word esistente (inserendo i dati del paziente SELEZIONATO O DA ME SCELTO nei rispettivi segnalibri)
in modo tale che poi lo posso stampare e/o salvare.
Grazie.Ti consiglio preliminarmente la lettura di questo breve articolo tratto dal nostro Blog:
dove viene illustrata una tecnica per fare quello che chiedi.
Grazie per la veloce risposta, è una buona soluzione ma c'è un problema:
questa macro che mi hai segnalato mi crea ogni volta tanti files quanti sono i pazienti inseriti (circa 600);
a me servirebbe un modo per far si che crei solo il file (word o pdf) del paziente che mi interessa di volta in volta (per esempio devo rifare solo la scheda precompilata del paziente della riga 24).
Bè immagino che il codice vada comunque adattato alla propria esigenza (non sono l'autore dell'articolo, io ho solo inserito un commento a proposito dei segnalibri).
Potresti però, tanto per cominciare, inserire la bozza del codice anche se ti dà problemi in un file di esempio (immagino che avrai un template della scheda del paziente da compilare) e allegare sia questo che un pezzo di file Excel con alcuni dati da provare.
In questo modo non dobbiamo ricostruire uno scenario da zero ma lavoriamo sul reale e soprattutto possiamo darti le dritte per aggiustare il tiro.
Ho allegato i file di esempio (PER PROVARE I FILE VANNO COPIATI NELLA STESSA CARTELLA), funziona tutto solo che crea un file per ogni persona e non per uno solo che vorrei poter scegliere.
Allegati:
You must be logged in to view attached files.non per uno solo che vorrei poter scegliere
Quindi il primo passo da fare è far scegliere all'utente (tu o chi altri userà la routine) il nominativo del quale compilare il modulo. Allora devi chiederti in quale modo l'utente potrà scegliere questo nominativo:
- da un userform che presenta i nomi disponibili in un elenco?
- mediante un input box che chiede il numero d'ordine del paziente? o il codice, o il cognome, ecc.?
- mediante semplice attivazione di una cella della riga del paziente desiderato?
Una volta scelto tale nominativo, sarà facile aprire il file Word, compilarlo effettuando le opportune sostituzioni.
Bene allora ci siamo quasi.
Vorrei poter scegliere mediante una input box oppure mediante attivazione di una cella ma non so come fare.
vorrei scegliere dal cognome
Vorrei poter scegliere mediante una input box
Benissimo. L'istruzione che chiede all'utente interattivamente l'inserimento di un dato è (... finisci tu ...).
Cominciamo con lo scrivere lo scheletro del codice:
Option Explicit Sub chiedi_nome() Dim s As String s = ...istruzione che chiede in input all'utente l'inserimento di una stringa... End SubSuggerimento: funziona come una MsgBox, però questa visualizza un messaggio mentre a te serve un Box che chieda un Input 🙂
il problema è che i dati sono già inseriti e a me servirebbe un modo per scegliere un cognome (tra quelli già inseriti) e far compilare, solo per quell'utente, il documento word.
Potresti aiutarmi a risolvere?
Ho ben capito l'esigenza e ti sto guidando a risolverla.
Poichè può capitare il caso che tu abbia omonimie (i casi di cognomi uguali non sono infrequenti) forse invece che digitare il cognome ti conviene digitare un numero di codice; pertanto è necessario che nella tua base dati tu inserisca una colonna (diciamo la A) in cui metti i numeri da 1 in avanti per identificare in modo univoco ogni paziente (o come si dice: ogni record). Quando avvii la macro, dovrai inserire il numero di record da elaborare e il codice farà il resto.
Un'alternativa è creare una cella con convalida dati, che punti all'insieme di cognomi e nomi (anche qui per evitare le omonimie), e poi una volta fatta la scelta, lanciare la macro. Però i pazienti sono tanti (dicevi 600) e non è pensabile un menu a tendina con dentro 600 nomi 🙂
Io farei un passo alla volta e cercherei di mettere in piedi il meccanismo che ti permette di fare una scelta e successivamente di elaborare il documento pdf a partire dal word compilato con i dati in ingresso. Poi potrai pensare agli affinamenti (ad esempio, vedrei bene anche una userform e una listbox).
Comunque non hai completato il codice che ho iniziato a stendere. Qual è l'istruzione che chiede all'utente un dato in input?
OK e grazie ancora... allora ho appena creato i file di esempio capisco i casi di omonimia infatti il cognome era per avere un punto di partenza di esempio (userò il campo codice fiscale in seguito).
Nel file che ho creato ho inserito 3 macro:
una che, dopo aver selezionato la riga di interesse o cliccato sul campo desiderato, crea la cartella (PROBLEMA VORREI CHE APPAIA IL MESSAGGIO CARTELLA CREATA E SE LA CARTELLA GIA ESISTE NON LA SOVRASCRIVA E APPAIA IL MESSAGGIO CARTELLA GIA PRESENTE)
la seconda che, dopo aver selezionato la riga di interesse o cliccato sul campo desiderato, apre il documento word editabile (tutto ok)
la terza ed ultima che, dopo aver selezionato la riga di interesse o cliccato sul campo desiderato, crea il file pdf e lo salva nella cartella del paziente (PROBLEMA VORREI CHE SALVI IL FILE PDF NELLA CARTELLA DEL PAZIENTE SELEZIONATO nella macro attuale sono io a indicare il percorso scrivendo il cognome es. PISOLO).
Allegati:
You must be logged in to view attached files.Sei andato già avanti rispetto a quello che avevo iniziato a suggerirti io... bene, proseguiamo da qui allora.
1) Il modo per visualizzare un messaggio è utilizzare l'istruzione MsgBox().
2) Il modo più semplice per verificare se una cartella esiste è utilizzare l'istruzione Dir() con il parametro vbDirectory dentro un test If ... Then.
3) Per salvare nella cartella creata in precedenza, passi il nome della cartella alla routine che si occupa di creare il pdf e poi usi questo parametro come argomento per l'istruzione ExportAsFixedPDF (non SaveAs). Quindi la firma di tale routine diventa:
Public Sub Crea_Scheda_Pdf(nomecartella As String)e successivamente:
objDoc.ExportAsFixedFormat OutputFileName:=nomecartella & "\nomefile.pdf", ExportFormat:=17 'wdExportFormatPDFHo notato che nella versione che hai allegato sei tornato a utilizzare i Bookmarks in Word ma ti consiglio invece di applicare l'esempio di Albatros e utilizzare i segnaposto di testo. Poi per carità, se funziona senza problemi anche così, meglio 😀
Allora
1 - risolto creazione cartella con relativi messaggi (cartella creata o cartella già presente) quindi tutto OK;
2 - risolto apertura e compilazione documento word - quindi tutto OK;
3 - PROBLEMA RIMANENTE:
DOPO AVER SELEZIONATO L'UTENTE E CREATO LA CARTELLA, VORREI CHE QUANDO CREO IL PDF LO SALVASSE AUTOMATICAMENTE NELLA CARTELLA DEL PAZIENTE SELEZIONATO (nella macro attuale sono io a indicare il percorso scrivendo il cognome ES. PISOLO).Allegati:
You must be logged in to view attached files.Per risolvere il terzo problema, hai diverse strade:
1) come ti dicevo nel post precedente, devi trasformare la tua sub (che crea la scheda in Word) in una sub parametrica. Il nome del parametro deve essere la cartella che hai creato in precedenza. Quando hai creato la cartella memorizzi in una variabile globale o in una cella di Excel il nome della cartella e quindi passi questo valore alla sub:
Public Sub Crea_Scheda_Pdf(cartella As String)e l'istruzione che crea il pdf ne terrà conto in fase di costruzione del nome.
2) Puoi anche lasciare la sub com'è e siccome hai deciso che crei la cartella con il campo cognome, selezioni una cella della riga del paziente desiderato e poi premi il pulsante che crea il pdf; in tal modo la cella contiene il nome della cartella ed è questo il valore che puoi passare all'istruzione che crea il pdf:
objDoc.SaveAs ("D:\Download\ExcelChiamaWord2-1\" & Cells(ActiveCell.Row, 2) & "\Scheda_" & Format(Now(), "DD-MMM-YYYY hh mm") & ".pdf")Io però ho forti dubbi che questa istruzione funzioni... non è così che si crea il pdf 🙂 dovresti usare ExportAsFixedFormat.
-
AutoreArticoli
