Excel e gli applicativi Microsoft Office Macro per Esportare Dati Selezionati su Word

Login Registrati
Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
  • Autore
    Articoli
  • #13325 Score: 0 | Risposta

    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.

    #13327 Score: 1 | Risposta

    vecchio frac
    Senior Moderator
      272 pts

      Ti consiglio preliminarmente la lettura di questo breve articolo tratto dal nostro Blog:

      Compilare modello di Word con i record del file Excel

      dove viene illustrata una tecnica per fare quello che chiedi.

       

      #13328 Score: 0 | Risposta

      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).

       

      #13329 Score: 1 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        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.

        #13330 Score: 0 | Risposta

        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.
        #13333 Score: 1 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          totokamen2000 ha scritto:

          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.

           

          #13355 Score: 0 | Risposta

          Bene allora ci siamo quasi.

          Vorrei poter scegliere mediante una input box oppure mediante attivazione di una cella ma non so come fare.

          #13356 Score: 0 | Risposta

          vorrei scegliere dal cognome

          #13357 Score: 1 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            totokamen2000 ha scritto:

            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 Sub

            Suggerimento: funziona come una MsgBox, però questa visualizza un messaggio mentre a te serve un Box che chieda un Input 🙂

            #13358 Score: 0 | Risposta

            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?  

            #13363 Score: 1 | Risposta

            vecchio frac
            Senior Moderator
              272 pts

              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?

              #13367 Score: 0 | Risposta

              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.
              #13373 Score: 1 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                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     'wdExportFormatPDF

                Ho 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 😀

                #13403 Score: 0 | Risposta

                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.
                #13407 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  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.

                   

                Login Registrati
                Stai vedendo 15 articoli - dal 1 a 15 (di 15 totali)
                Rispondi a: Macro per Esportare Dati Selezionati su Word
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni: