Condividi:        

[EXCEL] Creare un unico documento word da una scelta di file

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[EXCEL] Creare un unico documento word da una scelta di file

Postdi nagato » 18/06/11 10:38

Buongiorno a tutti gli esperti del forum, e in particolar modo quelli di excel, che non mi hanno mai deluso per le mie richieste (e che invidio non poco :P ).
Il problema e' il seguente:

Ho un archivio di file .doc abbastanza corposo che devo inserire nella colonna A (ancora meglio sarebbe farlo con menu multipli di scelta a tendina), ma andiamo per gradi:
la funzione principale sarebbe quella di poter scegliere dalla colonna A i file che servono, i cui titoli man mano che si scelgono si visualizzino nella colonna B. Successivamente servirebbe una macro che crei un unico documento word formato dai file precedentemente scelti presenti appunto nella colonna B.
Si puo' fare'?

Saluti e grazie come al solito :)
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Sponsor
 

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi PcBase » 18/06/11 23:16

Ciao

Tengo ad informare che Word 2000-2003 hanno già la possibilità di effettuare direttamente la richiesta.
Con: Visualizza - Struttura - Inserisci documento secondario

Lavorando con Word questo non è un problema!
Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 143
Iscritto il: 24/02/11 23:26

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi Flash30005 » 19/06/11 01:31

Leggi ilo post di PcBase qui sopra
inoltre prova la macro postata da Michell
che potresti adattare alle tue esigenze
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=91952

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi nagato » 20/06/11 11:49

Ok, ho trovato questa macro:

----------------------------
Sub ApriWord()
Dim WordApp As Object
Set WordApp = CreateObject("Word.Application")
WordApp.Documents.Open "C:\CARTELLA\MIOFILE.DOC"
WordApp.Visible = True
Set WordApp = Nothing
End Sub
---------------------------

che in parole povere apre il file "miofile.doc".
Qual'e' la sintassi corretta da utilizzare al posto di "mio file.doc" se volessi che la macro aprisse con word solo i file elencati in alcune celle, sempre della stessa directory? Per capirci la quarta riga andrebbe modificata:

WordApp.Documents.Open "C:\CARTELLA\A1;A2;A3"

Come fare?
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi Anthony47 » 20/06/11 14:30

Il mio suggerimento e' che il lavoro principale lo fai in Word, dopo che excel avra' fatto un lavoro preparatorio.
Ad esempio tramite macro excel potresti copiare in una direcory ben precisa tutti i file word che vuoi unire in un unico documento.
Poi, come hai imparato a fare, apri un documento word vuoto, che pero' contiene una macro autoeseguibile all' apertura che legge la directory e accoda tutti i file.
Trovi una macro di partenza nell' help on line del vba di word alla voce " Metodo InsertFile"; con il processo che ti ho detto la macro sara' piu' o meno questa:
Codice: Seleziona tutto
Private Sub Document_Open()
ChDir "C:\TMP1234"     '<< La directory coi file
myName = Dir("*.doc")
While myName <> ""
    With Selection
        .InsertFile FileName:=myName, ConfirmConversions:=False
        .InsertParagraphAfter
        .InsertBreak Type:=wdSectionBreakNextPage
        .Collapse Direction:=wdCollapseEnd
    End With
    myName = Dir()
Wend
' ActiveDocument.SaveAs FileName:="C:\path completo\pippo" & Format(Now(), "yyyy-mm-dd--hh:mm:ss")
'ActiveDocument.Close
End Sub

Le due istruzioni commentate in fondo servirebbero a salvare il file con un nome specifico e la desinenza aaaa-mm-gg—hh:mm:ss; altrimenti salva e chiudi "a mano il file".

Fai sapere se pensi di procedere in questa direzione e dove arrivi.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi nagato » 21/06/11 11:51

Ok, il lavoro e' stato duro e lungo ma alla fine ce l'ho fatta grazie al vostro aiuto.
Come avevate detto voi, ho fatto svolgere a word il lavoro di unione dei file tramite la macro automatica che mi hai suggerito. Per quanto riguarda excel ho utilizzato la macro suggerita da Avatar3; questa macro l'ho resa automatica all'avvio in modo tale che, all'apertura del foglio di lavoro, la macro leggera' tutti i file contenuti nella cartella da me indicata e mi restituira' l'elenco dei file comodamente in una cella; a quest'ultima ho anche applicato una convalida di dati dirottata in un'altro foglio di lavoro per avere un menu a tendina comodo per scegliere il file che mi interessa e poiche' l'elenco di file si apriva sul foglio 2 (e io avevo bisogno che chi apriva il progetto si trovasse di fronte al menu' a tendina gia pronto), ho aggiunto alla macro dell'elenco dei file l'istruzione:

Codice: Seleziona tutto
Sheets("Foglio1").Select
    Range("A2").Select


per tornare al foglio 1 alla cella A2 dove compare il menu a tendina.
Per quanto riguarda la macro per inserire i file scelti dal menu a tendina di excel nella cartella dalla quale la macro automatica di word si va a prendere i file per creare il documento, ho modificato una macro trovata sul web in questo modo:

Codice: Seleziona tutto
Sub CopiaTuttiFiles()
Dim eZio As Object
Set eZio = CreateObject("Scripting.FileSystemObject")
eZio.CopyFile Range("A2").Value, "C:\Users\Andrea\Desktop\VERG\TEMPDOC\", True
Dim WordApp As Object
Set WordApp = CreateObject("Word.Application")
WordApp.Documents.Open "C:\Users\Andrea\Desktop\VERG\progetto.docm"
WordApp.Visible = True
Set WordApp = Nothing
MsgBox ("Processo completato")
End Sub


in pratica nella cella "A2" si trova il menu a tendina precedentemente creato con la convalida di dati;pertanto, una volta scelto il file, la macro lo copiera' nella cartella "TEMPDOC".
Successivamente con il comando "WordApp.Documents.Open" viene aperto il documento di word che appunto contiene la macro automatica che prende tutti i file della cartella e li riunisce in uno solo.
Et voila', il gioco e' fatto.

Rimangono solo un paio di problemi:

1) Devo aggiungere un codice alla macro di word che elimini tutti i file dalla cartella "TEMPDOC" subito dopo aver creato il documento finale, altrimenti col tempo ci si ritrova con la cartella piena zeppa di file.

2)Per quanto riguarda la macro di avatar3, ossia la seguente:
Codice: Seleziona tutto
Private Sub Workbook_Open()
perc = "C:\Users\Andrea\Desktop\VERG\ARCHIVIO\PREMESSE\"
    Worksheets("Foglio2").Select
    Range("A2").Select
      With ActiveCell
        Worksheets("Foglio2").Range(.Cells(1), .End(xlDown)).ClearContents
      End With
      ElencoFile Direct:=perc, Estens:="*.Doc", Inicell:=ActiveCell
    End Sub
    Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
      Dim i As Integer, f As String
      ChDir Direct
      f = Dir(Estens)
      If f = "" Then Exit Sub
      While f <> ""
        i = i + 1
        Inicell(i) = f
        f = Dir
      Wend
      Sheets("Foglio1").Select
    Range("A2").Select
End Sub


viene generato l'elenco dei file nella colonna A a partire dalla cella 2 della cartella "PREMESSE".
Ora io ho bisogno di un secondo gruppo di file generati da un'altra cartella, chiamata "GRUPPO1" che verranno visualizzati nella colonna B cella 2. Vorrei fare una cosa pulita e integrare il comando in questa macro oppure devo fare un'altra macro identica a questa cambiando semplicemente i dati? Il problema e' che ho parecchie cartelle da processare e mi ritroverei con parecchie macro tante quante le cartelle che mi servono.

Spero di essere stato chiaro, grazie a tutti :)
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi Anthony47 » 21/06/11 23:07

Per la 1), in testa a CopiaTuttiFiles() metti
Codice: Seleziona tutto
Kill "C:\Users\Andrea\Desktop\VERG\TEMPDOC\*.*"   '<<< VERIFICARE  BENE BENE LA DIR
Ti cancella tutti i file della directory, senza possibilita' di "UnDo".

Per la 2, la macro che usi e' quella di evento "workbook open", ne puoi avere solo una che quindi deve gestire tutte le directory di cui parli.
Se le directory sono note le puoi scrivere nel codice; es.
Codice: Seleziona tutto
Private Sub Workbook_Open()
Listaperc=array("C:\prima dir\", "C:\Documents and settings\pippo\subdir\", "C:\temp1\") '<++
For I= LBound(listaperc, 1) to UBound(listaperc, 1) '<++
perc = Listaperc(I)    '<<
    Worksheets("Foglio2").Select
    Range("A2").offset(0,I).Select    '<<
' il resto della macro
Next I    '<+++
End Sub

Le istruzioni marcate <++ sono aggiunte, quelle << sono modificate rispetto a quanto avevi, le altre sono invariate.
IL COLLAUDO L' FATTO SOLO A SPEZZONI NON AVENDO UN AMBIENTE CONFRONTABILE, quindi procedi a un collaudo esaustivo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi nagato » 22/06/11 08:58

Funziona perfettamente,grazie, l'unica conseguenza e' nella macro che copia i file nella directory, e piu' precisamente:
Codice: Seleziona tutto
eZio.CopyFile Range("A2").Value, "C:\Users\Andrea\Desktop\VERG\TEMPDOC\", True

ossia mi copia il file visualizzato nella cella A2 ma devo aggiungere anche le altre celle! :o
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi nagato » 22/06/11 11:31

...mi sono anche accorto che cosi' ora non copia nemmeno il file visualizzato nella cella A2, probabilmente perche' bisogna modificare la stringa in seguito alla modifica della macro che cre l'elenco dei file....
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi Anthony47 » 22/06/11 14:05

La mia risposta precedente e' relativa al "Rimangono solo un paio di problemi", quindi a come cancellare i file nelle directory usate e come creare piu' elenchi di file. Tutto il resto assumo (assumevo) che fosse ok.

Ora rileggendo gli ultimi tuoi post e andando indietro vedo che tu copi nella directory di servizio un file alla volta, usando la macro CopiaTuttiFiles (che, dal nome e senza leggere il codice, avevo interpretato copiasse tutti i file che ti servivano); questo significa che non puoi mettere lì l' istruzione Kill, perche' in quel modo la directory sarebbe svuotata tutte le volte che metti un file.
Quindi cancellala, andra' messa da un' altra parte.

Ma a questo punto ti chiedo di precisare che cosa volevi fare inizialmente, dove sei arrivato, che cosa vorresti fare in piu'; tutto questo ignorando la mia risposta di ieri sera, della cui utilita' a questo punto sono in dubbio.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi nagato » 22/06/11 17:51

Riepilogo esattamente la situazione come e' in questo momento(e in parte funzionante alla perfezione):

1)Apro un file excel
2)All'apertura viene eseguita la tua macro modificata:

Codice: Seleziona tutto
Private Sub Workbook_Open()
Listaperc = Array("C:\Users\Andrea\Desktop\VERG\ARCHIVIO\CAPITOLO1\", "C:\Users\Andrea\Desktop\VERG\ARCHIVIO\CAPITOLO2\")
For i = LBound(Listaperc, 1) To UBound(Listaperc, 1)
perc = Listaperc(i)
    Worksheets("Foglio2").Select
    Range("A2").Offset(0, i).Select
      With ActiveCell
        Worksheets("Foglio2").Range(.Cells(1), .End(xlDown)).ClearContents
      End With
      ElencoFile Direct:=perc, Estens:="*.Doc", Inicell:=ActiveCell
      Next i
    End Sub
    Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
      Dim i As Integer, f As String
      ChDir Direct
      f = Dir(Estens)
      If f = "" Then Exit Sub
      While f <> ""
        i = i + 1
        Inicell(i) = f
        f = Dir
      Wend
      Sheets("Foglio1").Select
    Range("A2").Select
End Sub


e cioe' i file .doc presenti nelle directory "CAPITOLO1" e "CAPITOLO2" vengono elencati rispettivamente nella cella A2 e B2 del foglio 2.
Supponendo di aver inserito due file in ogni directory (file A e B in "CAPITOLO1" e file C e D in "CAPITOLO2") mi ritrovero':
il File A in posizione A2
il File B in posizione A3
il File C in posizione B2
Il File D in posizione B3

siamo sempre nel foglio2, poi a fine macro ho inserito il rimando al foglio1.Tutto funziona.

Di questi due elenchi ho creato una convalida dati nel foglio 1 in due celle differenti (A3 e A4) per avere due menu a tendina dai quali scegliere i file.

3)Poi tramite questa macro:

Codice: Seleziona tutto
Sub CopiaTuttiFiles()
Dim eZio As Object
Set eZio = CreateObject("Scripting.FileSystemObject")
eZio.CopyFile Range("A3").Value, "C:\Users\Andrea\Desktop\VERG\TEMPDOC\", True
Dim WordApp As Object
Set WordApp = CreateObject("Word.Application")
WordApp.Documents.Open "C:\Users\Andrea\Desktop\VERG\progetto.docm"
WordApp.Visible = True
Set WordApp = Nothing
MsgBox ("Processo completato")
End Sub


Il file selezionato dal menu a tendina nella cella A3 viene appunto copiato nella directory "TEMPDOC", ma ho bisogno che anche per la cella A4 (dove c'e' l'altro menu a tendina) venga prelevato il file per la copia.
Poi, come si vede dal codice, si apre word che contiene al suo interno questa macro:


Codice: Seleziona tutto
Sub AutoOpen()
    ChDir "C:\Users\Andrea\Desktop\VERG\TEMPDOC\"
    myName = Dir("*.docx")
    While myName <> ""
        With Selection
            .InsertFile FileName:=myName, ConfirmConversions:=False
            .InsertParagraphAfter
            .InsertBreak Type:=wdSectionBreakNextPage
            .Collapse Direction:=wdCollapseEnd
        End With
        myName = Dir()
        Kill "C:\Users\Andrea\Desktop\VERG\TEMPDOC\*.*"
    Wend
    End Sub


che correttamente preleva i file nella directory "TEMPDOC", li accoda, crea un solo documento unico e alla fine svuota la directory.

Tutto funziona alla perfezione(anche la macro di word).

Il problema sta' solo nel modificare la macro excel che esegue la copia dei file per fargli considerare non solo la cella A3 del foglio 1(dove viene scelto il file dal menu a tendina), ma anche la cella successiva (A4), dove ho inserito l'altro menu a tendina. Inoltre ho intenzione di fare un copia incolla nelle celle successive dei menu a tendina per avere maggior scelta nei file e quindi dovro' inserire tutte le celle nella macro per fargli prelevare i relativi files selezionati.

Era doverosa la spiegazione, spero di essermi fatto capire. Per me e' molto importante fare questi passaggi, sto imparando molte cose.:)

Saluti
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi Anthony47 » 22/06/11 22:48

Quindi finora non hai ancora accodato in un unico nuovo documento piu' di un file...
Ne' la CopyFile dovrebbe lavorare se i file sono presenti in una directory che non sia la corrente.

Inoltre che cosa suggerire dipende dall' operazione da compiere: devi (a) unire 2 file, uno dal primo elenco e uno dal secondo elenco, (b) pochi file, oppure (c) il mix e' piu' complesso?

Volendo pensare alla cosa piu' complessa allora il mio suggerimento e' che su Foglio1 ti crei l' elenco dei file da unire, usando una macro di Worksheet_Change che lavora sulle celle A3 e A4 e che crea un elenco comprendente drive+directory+filename diciamo in A5:A50. Vedi nota *** oltre.
Successivamente una nuova macro CopiaTuttiFiles copia i file elencati, lancia word col file "modello" (quello con la macro alla open), cancella l' elenco, cancella i file nella directory di servizio; qualcosa come
Codice: Seleziona tutto
    Sub CopiaTuttiFiles()      'Nuova Versione
    Dim eZio As Object
    Set eZio = CreateObject("Scripting.FileSystemObject")
For Each fNome In Range("A5:A50")
    If fNome="" then Exit For
    eZio.CopyFile fNome.Value, "C:\Users\Andrea\Desktop\VERG\TEMPDOC\", True
Next fNome
    Dim WordApp As Object
    Set WordApp = CreateObject("Word.Application")
    WordApp.Documents.Open "C:\Users\Andrea\Desktop\VERG\progetto.docm"
    WordApp.Visible = True
    Set WordApp = Nothing
    MsgBox ("Processo completato")
Kill "C:\Users\Andrea\Desktop\VERG\TEMPDOC\*.*"   
Range("A5:A50").Clear
    End Sub

Nota ***: per poter preparare in A5:A50 un elenco comprendente drive+directory+filename sara' necessario che la macro di Workbook_Open memorizzi in testa alla colonna A, oppure B, oppure ... il percorso su cui quei file sono reperibili; per questo dovrebbe essere sufficiente aggiungere l' istruzione marcata <<< nella macro:
Codice: Seleziona tutto
End With       '        Esistente
Activecell.Offset(-1,0).value =perc                  '<<< Aggiungere
      ElencoFile Direct:=perc, Estens:="*.Doc", Inicell:=ActiveCell    '        Esistente

Potrebbe anche essere utile una macro "Azzera tutto" da collegare a un pulsante, che cancella l' elenco file gia' creato e i file nella directory di servizio.

Se vengono fuori problemi posta ancora.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi nagato » 24/06/11 10:58

L'unico altro problema che mi viene fuori e' questo:

mi sembra di non aver fatto particolari modifiche ma, utilizzando questo workbook, che poi era il primo, piu' semplice:

Codice: Seleziona tutto
Private Sub Workbook_Open()
perc = "C:\Users\Andrea\Desktop\VERG\ARCHIVIO\"
    Worksheets("Foglio2").Select
    Range("A2").Select
      With ActiveCell
        Worksheets("Foglio2").Range(.Cells(1), .End(xlDown)).ClearContents
      End With
      ElencoFile Direct:=[b]perc[/b], Estens:="*.Doc", Inicell:=ActiveCell
    End Sub
    Sub ElencoFile(Direct As String, Estens As String, Inicell As Range)
      Dim i As Integer, f As String
      ChDir Direct
      f = Dir(Estens)
      If f = "" Then Exit Sub
      While f <> ""
        i = i + 1
        Inicell(i) = f
        f = Dir
      Wend
      Sheets("Foglio1").Select
    Range("A2").Select
End Sub


all'apertura del file di excel mi e' comparso il seguente errore:

"Errore di compilazione:
Tipo non corrispondente per l'argomento Byref."

e il debug evidenzia il codice "perc", che ho messo in grassetto poco sopra.
Perche'? Ho provato anche a creare un nuovo file con questo workbook con la stessa macro ma adesso mi esce sempre l'errore...??
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi Anthony47 » 24/06/11 13:44

Prova a modificare la testata di ElencoFile in:
Codice: Seleziona tutto
Sub ElencoFile(ByVal Direct As String, byVal Estens As String, Inicell As Range)
Altrimenti Direct ed Estens dovrebbero essere passati come "riferimenti", e non e' il tuo caso.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL] Creare un unico documento word da una scelta di

Postdi nagato » 24/06/11 16:14

Perfetto, sembra non avere problemi ora, gracias!
nagato
Utente Junior
 
Post: 36
Iscritto il: 22/03/09 11:17


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Creare un unico documento word da una scelta di file":


Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti