COPIARE DATI TABELLA DA EXCEL A WORD



  • COPIARE DATI TABELLA DA EXCEL A WORD
    di phoenix11 (utente non iscritto) data: 07/08/2017 10:06:38

    Ciao a tutti,

    sto copiando dei dati da celle di excel su word. Utilizzo il seguente metodo: su un file .docx ho creato dei segnalibri che il cui valore corrisponde ad una determinata cella di excel.
    Avrei esigenza però di incollare i valori presenti su più tabelle excel sulla corrispondenti del documento word . Queste tabelle possono variare in numero di righe ma le colonne rimangono fisse ( la prima riga è di intestazione).

    Non so se è possibile allegare i documenti nel frattempo posto il codice di partenza (ho commentato le parti non necessarie al momento)

    Spero di essere stato chiaro, ringrazio anticipatamente dell'aiuto!
     
    Public Sub Macro()
    
    On Error GoTo RigaErrore
    
        Dim objWord As Object
        Dim objDoc As Object
        Dim oExcel As Object
        Dim oSheet As Object
        
        Dim sPath As String
        Dim sNomeFile As String
        Dim sh As Worksheet
        Dim lRiga As Long
        Dim lng As Long
        
        Set sh = ThisWorkbook.Worksheets(ActiveSheet.Name)
        sPath = "C:Prova"
        sNomeFile = "Master.docx"
        
        With sh
            lRiga = .Range("K" & .Rows.Count).End(xlUp).Row
            Set objWord = CreateObject("Word.Application")
            'Set objExcel = CreateObject("Excel.Application")
            For lng = 2 To lRiga
                If Dir(sPath) <> "" Then
                    Set objDoc = objWord.Documents.Open(sPath & sNomeFile)
                    objDoc.Bookmarks("Uno").Range.Text = .Range("A" & lng).Value
                        If Dir(sPath & .Range("K" & lng).Value & "-" & .Range("O" & lng).Value & ".docx") <> "" Then
                        
                            MsgBox "File exist."
                            
                        Else
                        
                        objDoc.SaveAs (sPath & .Range("A" & lng).Value & ".docx")
                        'Range("Q" & lng).Value = (sPath & .Range("K" & lng).Value & "-" & .Range("O" & lng).Value & ".docx")
                        'MsgBox (sPath & .Range("K" & lng).Value & "-" & .Range("B" & lng).Value & ".docx")
                        'MsgBox lng
                        'MsgBox ActiveSheet.Name
                        objWord.Visible = True
                        objDoc.Close
                        Set objDoc = Nothing
                        End If
                End If
            Next
        End With
        
    RigaChiusura:
        If Not objWord Is Nothing Then
            objWord.Quit
            Set objWord = Nothing
        End If
        Exit Sub
    
    RigaErrore:
        MsgBox Err.Number & vbNewLine & Err.Description
        Resume RigaChiusura
    
    End Sub
    



  • di phoenix11 data: 07/08/2017 10:29:20

    Ho allegato i file



  • di phoenix11 data: 07/08/2017 14:44:00




  • di Vecchio Frac data: 07/08/2017 15:13:51

    Ecco, adesso che ho un momento libero do un'occhiata al tuo problema :)





  • di Vecchio Frac data: 07/08/2017 15:27:55

    cit. "Spero di essere stato chiaro"
    ---> Non moltissimo, ti chiederei un esempio pratico del risultato da raggiungere.
    Anzitutto nel file docx non ci sono "dei" segnalibri ma solo "un" segnalibro.
    Nei file di esempio allegati non capisco quali e dove sono "i valori presenti su più tabelle excel " da riportare "sulla corrispondenti del documento word" (corrispondenti cosa? tabelle o celle?).
    Fai un esempio pratico sulla base dei dati allegati:
    -ho questa tabella dati
    -voglio questo risultato in Word

    Hai mostrato un codice: non funziona come ti aspetti?






  • di phoenix11 data: 07/08/2017 15:47:29

    Ciao Vecchio Frac,

    ho messo un solo segnalibro per semplificare il documento. Il codice che ho postato funziona ma mi servirebbe integrarlo appunto copiando i valori della tabella excel nella tabella word.

    La tabella di riferimento è compresa tra gli intervalli E:G; ne ho messa una sola sempre per semplificare ma se è un problema ne aggiungo altre. Ti allego il documento di "output.docx" che riassume quanto detto e forse è più esplicativo

    Grazie intanto




  • di Albatros54 data: 07/08/2017 16:00:01

    Tempo fa, mi sono posto questo problema, dovevo stampare un database di Excel in una tabella di word.
    Ma non potevo stampare direttamente da excel?No!! troppo semplice.
    Ho crato un documento in word ed ho inserito una tabella, formata da una riga e da tante colonne, quanto erano le colonne del mio Database in Excel.
    Ad ogni cella della tabella ho inserito il nome delle colonna del mio Database.
    Ho dato un nome al documento di Word è lo salvato,questo sara il master della stampa.
    Ho aperto il mio file di Excel, HO MESSO IN VBA IL RIFERIEMENTO ALLA LIBRERIA MICROSOFT WORD 12.0 OBJECT LIBRARY, e in un modulo ho inserito il codice che ti posto, il tutto funziona in Excel 2007.
    Sia il documento master di Word che il file di Excel debbono essere nella stessa Dir.
    Ciao
    albatros54
    P.S. comunque ti ho allegato i file
     
    Public Sub ProvatabellaWord()
        Dim tbl As Table
        Dim s As String
        Dim primaCella As String
        Dim nomef As String
    
    
        primaCella = "Nome"
        sPath = ThisWorkbook.Path & ""
        Set myws = ActiveSheet
        Set Word = CreateObject("Word.Application")
        Word.Visible = True
        Set DOC = Word.Documents.Open(sPath & "Master.docx")
    
        With DOC
    
    
            r = 1
            For Each tbl In Word.ActiveDocument.Tables
    
                s = tbl.Rows(1).Cells(1).Range.Text
    
                If InStr(1, s, primaCella) Then
                    v = myws.Cells(r, 1).Value
                    While v <> ""
                        If v = primaCella Then
                            r = r + 1
                            c = 1
                            Do While myws.Cells(r, c).Text <> ""
                                tbl.Rows.Add
    
                                Set newrow = tbl.Rows(tbl.Rows.Count)
                                Do While myws.Cells(r, c).Text <> ""
                                    cellValue = myws.Cells(r, c).Text
                                    newrow.Cells(c).Range.Text = cellValue
                                    With newrow.Range.Font
                                        .Italic = True
                                        .Bold = False
                                        .Name = "Arial"
                                        .Size = 12
    
                                    End With
                                    c = c + 1
                                Loop
                                r = r + 1
                                c = 1
                            Loop
                        End If
    
                        r = r + 1
                        v = myws.Cells(r, 1).Value
                    Wend
                End If
                nomefile = tbl.Rows(2).Cells(1).Range.Text
                nomefileb = Len(nomefile)
                '            nomef = Left(nomefile, (nomefileb - 2))
            Next tbl
            nomef = InputBox("Salva con Nome ", "Albatros54")
            If (nomef = "" And vbOK) Then
                nomef = Left(nomefile, (nomefileb - 2))
            End If
            If Dir(sPath & nomef & ".docx") <> "" Then
                Kill (sPath & nomef & ".docx")
            End If
            .SaveAs (sPath & nomef & ".docx")
            .Close
        End With
    
        Word.Quit
        Set DOC = Nothing
        Set Word = Nothing
    
    
    
    End Sub
    






  • di phoenix11 data: 07/08/2017 16:11:55

    Ciao Albatros,

    si il concetto è proprio questo però dovrei integrarlo al mio codice e poterlo replicare per più tabelle all'interno del documento. Inoltre dovrei mantenere il formato di destinazione della tabella word.

    Nel frattempo grazie per l'interesse!



  • di Albatros54 data: 07/08/2017 18:32:03







  • di phoenix11 data: 08/08/2017 09:24:14

    Se guardi l'allegato di output vedrai il risultato che spero di ottenere. I dati che sono nella tabella excel devono essere riportati nella tabella word. Il risultato avrei poi bisogno di integralo al mio codice
    Questo processo deve poter essere replicato per eventuali n tabelle.



  • di phoenix11 data: 09/08/2017 09:43:15

    Qualcuno ha idee?