Condividi tramite

Da Excel a word

Anonimo
2021-09-29T15:38:00+00:00

Buona sera,

chiedo il Vostro aiuto,

ho un database Excell creato con office 2019, che contiene il classico elenco:

(ESEMPIO)

Nprotocollo - nome - cognome - data di nascita - luogo di nascita

 100                tizio          caio            10/10/2000               Bari

 100                caio          tizio            13/11/1997              Roma

 200                Mio           Tuo            07/03/1978              Pisa

________________________________________________________________________________

vorrei riuscire a creare più file word (ho provato con la stampa unione e non riesco), ognuno con l'elenco di persone con lo stesso protocollo, cerco di spiegarmi meglio, nel caso dell'esempio dovrei avere due pagine word (o due file word), uno con protocollo nr. 100 che contenga tizio e caio, e l'altro con protocollo nr. 200 che contenga mio

Spero davvero di essere stato chiaro

GRAZIE a tutto per il contributo.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

11 risposte

Ordina per: Più utili
  1. Anonimo
    2021-09-29T21:31:09+00:00

    Ciao Michele,

    ho un database Excell creato con office 2019, che contiene il classico elenco:

    (ESEMPIO)

    Nprotocollo - nome - cognome - data di nascita - luogo di nascita

    100 tizio caio 10/10/2000 Bari

    100 caio tizio 13/11/1997 Roma

    200 Mio Tuo 07/03/1978 Pisa

    ________________________________________________________________________________

    vorrei riuscire a creare più file word (ho provato con la stampa unione e non riesco), ognuno con l'elenco di persone con lo stesso protocollo, cerco di spiegarmi meglio, nel caso dell'esempio dovrei avere due pagine word (o due file word), uno con protocollo nr. 100 che contenga tizio e caio, e l'altro con protocollo nr. 200 che contenga mio

    Ho presupposto che la tua tabella di database sia una tabella di Excel denominata Tabella1.

    Prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice: (vedi di sotto)

     '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim WB As Workbook 
    
    Dim SH As Worksheet 
    
    Dim RngTabella As Range 
    
    Dim oTabella As ListObject 
    
    Dim arrUnique() As Variant 
    
    Dim oWord As Object 
    
    Dim oDoc As Object 
    
    Dim i As Long 
    
    Const sFoglio As String = **"Foglio1"              '<<=== Modifica** 
    
    Const sTabella As String = **"Tabella1"            '<<=== Modifica** 
    
    Set WB = ThisWorkbook 
    
    Set SH = WB.Sheets(sFoglio) 
    
    Set oTabella = SH.ListObjects(sTabella) 
    
    With oTabella 
    
        Set RngTabella = .Range 
    
        arrUnique = SortedUniqueList(.DataBodyRange.Value) 
    
    End With 
    
    Set oWord = CreateObject("Word.Application") 
    
    oWord.Visible = True 
    
    For i = 1 To UBound(arrUnique) 
    
        Set oDoc = oWord.Documents.Add 
    
        With RngTabella 
    
        .AutoFilter Field:=1, Criteria1:=arrUnique(i) 
    
        .Copy 
    
        End With 
    
        With oDoc 
    
            .Paragraphs(1).Range.PasteExcelTable False, False, False 
    
            .SaveAs2 "Protocollo " & arrUnique(i) & ".docx" 
    
            .Close 
    
        End With 
    
    Next i   
    
    RngTabella.AutoFilter Field:=1 
    
    oWord.Quit 
    
    Set oDoc = Nothing 
    
    Set oWord = Nothing 
    

    End Sub

    '-------->>

    Public Function SortedUniqueList(V As Variant)

    Dim oSortedUniqueList As Object 
    
    Dim arrOut() As Variant 
    
    Dim sStr As String 
    
    Dim i As Long 
    
    Set oSortedUniqueList = CreateObject("System.Collections.Sortedlist") 
    
    With oSortedUniqueList 
    
        For i = LBound(V) To UBound(V) 
    
            sStr = V(i, 1) 
    
            If Not sStr = vbNullString Then 
    
                If Not .ContainsKey(sStr) Then 
    
                    .Add Key:=sStr, Value:=i 
    
                End If 
    
            End If 
    
        Next i  
    
        ReDim arrOut(1 To .Count) 
    
        For i = 0 To .Count - 1 
    
            arrOut(i + 1) = .GetKey(i) 
    
        Next i 
    
    End With 
    
    SortedUniqueList = arrOut 
    

    End Function

    '<<========  

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm
    • Alt+F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester
    • Esegui

    In questo modo il codice creerà un nuovo documento Word denominato con il contenuto della prima colonna della tabella preceduta dalla parola Protocollo, ad esempio Protocollo 200. Ogni documento Word conterrà un sottoinsieme della tabella originale contenente tutte le righe che corrispondono al Protocollo valore di interesse.

    Potresti scaricare il mio file di prova Michele20210928.xlsm

    Per evitare problemi di incollaggio che potrebbero essere causati dall'attuale editor della Community, ti consiglio vivamente di copiare il codice dal mio file prova direttamente nel modulo di codice che hai creato nella tua cartella di lavoro.

    Postscriptum:

    Potresti scaricare i 3 file Word creati com il mio codice utilizzando la tabella nel il mio file di prova Excel

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2021-09-30T07:59:59+00:00

    Ciao Federico,

    chiedo di potermi inserire nella discussione. Mi ha molto interessato la domanda e ho seguito la discussione.
    Complimenti a Norman; ho provato il suo file e funziona perfettamente, mentre inserendolo la macro in un file da me creato dandogli il nome Tabella1, mi da l'errore che Michele ha riportato.

    Un aiuto in merito.

    Il tuo errore suggerisce che la tua tabella dati non sia una tabella Excel (vedi la mia risposta sopra a Michele) o, in alternativa, che ci sia un errore nel nome assegnato alla tabella. In quest'ultimo caso assicurati che il nome assegnato alla Costante sTabella corrisponda esattamente al nome che hai assegnato alla tua tabella:

    Const sTabella As String = "Tabella1" '<<=== Modifica

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-09-30T07:46:22+00:00

    Ciao Michele,

    Grande Norman, grazie della risposta..

    ho proceduto a fare come meravigliosamente hai descritto, purtroppo non funzione mi da un errore di run-time, evidenziando questa riga:

    Set oTabella = SH.ListObjects(sTabella)

    [...]

    Il tuo errore suggerisce che la tua tabella di dati non sia una tabella di Excel.

    Come indicato nella mia risposta precedente, il mio codice presuppone che la tua tabella di dati sia una tabella di Excel:

    Ho presupposto che la tua tabella di database sia una tabella di Excel denominata Tabella1.

    Se la tua tabella di dati non è una tabella di Excel, per convertirla nel tipo corretto di tabella, con funzionalità di filtro automatico integrate, seleziona una cella all'interno della tabella e digita Ctrl+T. Poi, riprova il codice.

    non sono riuscito a scaricare i file d'esempio che garbatamente mi hai proposto, per verificare dove io sbaglio, allego una immagine dell'errore:

    Per scaricare il mio file di prova, basta fare clic sul collegamento ipertestuale:

    Potresti scaricare il mio file di prova Michele20210928.xlsm

    In modo analogo, per scaricare i 3 file Word creati con il mio codice:

    Potresti scaricare i 3 file Word creati com il mio codice utilizzando la tabella nel il mio file di prova Excel

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2021-09-30T07:25:48+00:00

    chiedo di potermi inserire nella discussione. Mi ha molto interessato la domanda e ho seguito la discussione.
    Complimenti a Norman; ho provato il suo file e funziona perfettamente, mentre inserendolo la macro in un file da me creato dandogli il nome Tabella1, mi da l'errore che Michele ha riportato.

    Un aiuto in merito.

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2021-09-30T07:12:05+00:00

    Grande Norman, grazie della risposta..

    ho proceduto a fare come meravigliosamente hai descritto, purtroppo non funzione mi da un errore di run-time, evidenziando questa riga:

    Set oTabella = SH.ListObjects(sTabella)

    non sono riuscito a scaricare i file d'esempio che garbatamente mi hai proposto, per verificare dove io sbaglio, allego una immagine dell'errore:

    La risposta è stata utile?

    0 commenti Nessun commento