VBA compilare foglio Word Con Excel in automatico



  • VBA compilare foglio Word Con Excel in automatico
    di PiHeich data: 21/05/2015 12:08:53

    Ciao a tutti,

    sto cercando di compilare un foglio Word partendo dai dati contenuti in un foglio Excel (codice scritto solo nel foglie Excel). Il foglio Excel deve essere compilato su una riga (o più) con varie info quali:
    Anagrafica, tariffe, ecc ecc

    Per il momento riesco ad aprire il mio Template di Word, aggiungere informazioni delle celle Excel in Word tramite Segnalibri (prendo il dato della cella e la inserisco nel segnalibro con un ciclo for avendo chiamto i segnalibri a1, a2, ..., an) e salvarlo con un'altro nome.
    Oltre a fare un "copia incolla" dei dati vorrei aggiungere dei grafici semplicissimi, essi devono essere creati in VBA tramite i dati che ho nel foglio Excel e "disegnati" sul file Word dove ho i segnalibri. Quindi vorrei evitare di avere il file Excel con all'interno, per appoggio o altro, i grafici. Sarebbe perfetto andare direttamente sul Word.

    Sempre usando degli IF e dei FOR vado a creare n grafici in base a se ci sono dei dati nelle celle, per farmi capire meglio posso creare da 1 a n grafici facendo un controllo se una cella riferita ad un grafico sia vuota. Il file Word è ben impaginato, se si crea un grafico oppure 5 oppure n le cose non si sovrappongono in quanto sono contenuti in una tabella (che poi colori di bianco per nasconderla) e metterò delle interruzioni di pagina fra quello che copio e i grafici riassuntivi che andranno alla fine del documento.

    Lo scopo del progetto è quello di risparmiare un sacco di tempo nella creazione dei documenti, con questo metodo l'operatore inserisce i dati nel foglio Excel ed in automatico si ritrova un Word compilato pronto per la stampa o per l'invio tramite mail (poi provvederò anche a fare il tutto in automatico, magari con dei flag almeno l'operatore sceglie cosa fare).

    Chi mi da una mano?

    Saluti




    Per il momento sto usando questo codice per testare i Segnalibri su Word:
     
    Sub Scrivi_in_file_esistente()
    
    Dim applWord As Object
    Dim docWord As Object
    Dim a1 As Excel.Name
    Dim i As Integer
    
    'set the Application object variable to create a new instance of Word:
    Set applWord = CreateObject("Word.Application")
    
    'make the Word window visible:
    applWord.Visible = True
    
    'maximize Word window:
    'replaced the Word's built-in constant wdWindowStateMaximize with its numerical value 1.
    applWord.WindowState = 1
    
    'opens an existing word document from a defined folder:
    Set docWord = applWord.Documents.Open("C:Users...Modello.docx")
    
    For i = 1 To 4
        docWord.Bookmarks("a" & i).Range.Text = Sheets("Ingresso dati").Cells(2, i + 1).Value
    Next i
    
    'close and save the document:
    docWord.SaveAs Filename:="C:Users...Offerta " & Sheets("Ingresso dati").Cells(2, 2).Value & ".docx"
    
    docWord.Close
    'quit the word application:
    applWord.Quit
    'clear the object variables:
    Set docWord = Nothing
    Set applWord = Nothing
        
    End Sub



  • di PiHeich data: 26/05/2015 08:58:32

    Nessuno?



  • di Albatros54 data: 26/05/2015 11:39:01

    Anni fa ho buttato giu qualche riga di codice, che mi permetteva di stampare dati da un foglio excel in Word.
    Non so se questo codice ti possa servire, adattandolo, al tuo progetto.
    La Sub Intervallo() memorizza in una matrice(arr), i valori delle varie celle del foglio1, che voglio stampare in Word.
    La sub stampaw(), crea un nuovo documento in Word con i dati della matrice.
    Ciao
    gioacchino
     
    Sub intervallo()
        Dim rig As Integer
        Dim col As Integer
        Dim rigT As Integer
        Dim colT As Integer
        Dim arr() As Variant
        Sheets("foglio1").Select
        'rig = Selection.Row
        'col = Selection.Column
        rigT = Range(Range("a1"), Range("a1").End(xlDown)).Count    ' Selection.Rows.Count
        colT = Range(Range("a1"), Range("a1").End(xlToRight)).Count    'Selection.Columns.Count
        'rigT = rigT + 1
        'col = 26
        ReDim arr(rigT, colT)
        For i = 1 To rigT
            For a = 1 To colT
                arr(i, a) = Cells(i, a)
            Next a
        Next i
        Call stampaW(arr, rigT, colT)    'rig, 'col,
        Debug.Print rig & " - " & col & " - " & rigT & " - " & colT & " - "
    
    End Sub
    Sub stampaW(arr As Variant, rt As Integer, ct As Integer)    ',rt As Integer, ct As Integer
        Dim appW As Word.Application
        Dim docW As Word.Document
        Dim tblW As Word.Table
        Dim rangeW As Word.Range
        Dim i As Integer
        Dim a As Integer
        Set appW = CreateObject("word.application")
        Set docW = appW.Documents.Add
        Set rangeW = docW.Range(0, 0)
        Set tblW = docW.Tables.Add(rangeW, rt, ct)
    
        With tblW
            For i = 1 To rt
                For a = 1 To ct
                    .Cell(i, a).Range.InsertAfter CStr(arr(i, a))
                Next a
            Next i
            .Columns.AutoFit
        End With
    
        appW.Visible = True
    
        Set appW = Nothing
        Set docW = Nothing
    End Sub
    
    






  • di PiHeich data: 27/05/2015 08:43:43

    QuPer quello che riguarda l'andare a stampare su un documento Word già l'ho fatto usando i segnalibri (visto che apro un file Word che uso come template). Se guardi il codice prendo i dati con un ciclo for da excel e sempre con lo stesso ciclo scorro i segnalibri. Quello che mi manca una volta che ho compilato in questo modo il Word è quello di fare dei semplicissimi grafici (si tratta di N grafici con 2 colonne...).

    La tua soluzione mi sembra comunque valida! Ma purtroppo non fa al caso mio :(

    Alla fine discutendone con dei colleghi, mi sa che in un foglio excel creo i grafici di appoggio....

    Grazie cmq della dritta!

    Sono comunque alla ricerca di aiuto :D

    Ciao