Sviluppare funzionalita su Microsoft Office con VBA Stampa unione in Powerpoint?

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

    RitaTakk

      Ciao a tutti.  Non sono esperta di VbA, ma una ladra di codice.  Buona 😉 Rubo ai ricchi (di conoscenza) per dare ai poveri (studenti). Sto cercando da ore una macro che faccia esattamente il lavoro della stampa unione di word.

      All'interno di un oggetto (casella testo) in un Powerpoint con una sola slide ("mioppt") ho inserito <<nome>> e <<cognome>>, vorrei (tanto) una macro che eseguita produca "n" slides quanti records valorizzati contiene l'excel origine dati ("mioxls" ) nelle colonne nome e cognome.  Qualcuno può (e vuole) aiutarmi?    (non chiedetemi perché non uso direttamente word.. Context issue..)

      Esiste il software Merge di PPTools, ma non funziona con win a  64bit e forse neanche con win10 (si parla solo di 7)..

      Una macro sarebbe....  just WOW.  Grazie.

      #33086 Score: 0 | Risposta

      Raffaele53
      Partecipante
        24 pts

        Che io sappia non si può fare (inutile chiederTi di Word), mà rimane la domanda "perchè da Powerpoint"?
        Sarebbero da inviare files o stampare? Se usi Excel, fai una pagina con una "foto/slide/presentazione" e dopo si vedrà.

        #33087 Score: 0 | Risposta

        RitaTakk
        Partecipante

          Grazie per la risposta. Powerpoint è una richiesta must (di terzi).  Certo, un workaround si trova per importare la slide in word e fare la stampa unione  (scopo ultimo è stampare le "n" slides, con le rispettive variabili), ma che non sia possibile con una macro farlo direttamente in powerpoint?  Quasi non ci credo, Vba può l'impossibile (quasi) sempre. Sono ancora fiduciosa..

          #33093 Score: 0 | Risposta

          alfrimpa
          Partecipante
            33 pts

            Ciao Rita

            Prova a guardare questo video secondo me puoi trarre spunti interessanti 

            #33094 Score: 0 | Risposta

            rollis13
            Partecipante
              8 pts

              Se serve per approfondire una modalità col VBA (di PP) per portare dati da Excel in Powerpoint qui ci sono degli esempi utili. Quello che non ho trovato è come 'centrare' la posizione all'interno della TextBox.

              Mail Merge in PowerPoint using VBA, Excel Version.

              #33102 Score: 0 | Risposta

              Raffaele53
              Partecipante
                24 pts

                Interessante il Link, tanto per "provarci" puoi allegare la Tua Slide?

                Ps.  Uso 2013, non credo ci siano problemi di compabilità

                #33114 Score: 0 | Risposta

                RitaTakk
                Partecipante

                  Funziona!!!    Hai dimostrato che è possibile.  Genial.  Grazie infinite rollis13!       Ma...

                  Tutto quello che mi serve ora (eh.. una cosuccia da niente   )   ...

                  ...è che non incolli sulla prima slide tutte le caselle di testo ("n" quante sono le righe in excel contenenti le variabili di interesse: Nome, Cognome, Id), ma che faccia una copia della slide 1 per incollare la casella di testo contenente le variabili della riga 2 in excel, un'altra copia della slide 1 per incollare la casella di testo contenente le variabili della riga 3 in excel.. ecc. La stampa unione insomma..  He.

                  Forse la chiave sta qui in questo ciclo Do While?!   Fare una copia della slide pulita prima di incollare la prima casella con le variabili del record 2 di excel, quindi prima di next row spostarsi sulla slide 2.. fare di nuovo una copia pulita..  incollare la seconda casella con le variabili.. e cosi via...  Come traduco il pensiero stupendo?  Please  

                  Do While Id > 0
                        FirstName = XL.Sheets(1).Cells(x, 2)
                        LastName = XL.Sheets(1).Cells(x, 3)
                         Set sh = ActivePresentation.Slides(1).Shapes.AddTextbox(msoTextOrientationHorizontal, 30, 10 + ((x - 1) * 100), 145, 100)
                        sh.TextFrame.TextRange.Font.Size = 14
                        sh.TextFrame.TextRange.Text = "First Name : " & Trim(FirstName) & vbNewLine & _
                                                      "Last Name: " & Trim(LastName) & vbNewLine & _
                                                      "Id : " & Right("00000" & Trim(CStr(Id)), 5)
                        'Next row
                        x = x + 1
                        Id = XL.Sheets(1).Cells(x, 1)
                     Loop

                   

                  #33115 Score: 0 | Risposta

                  RitaTakk
                  Partecipante

                    Raffaele.. certo.. allego la slide (una pagina vuota con una foto.. solo per prova) con la macro dentro suggerita da rollis13  (che funziona, ma incolla tutte le caselle sulla prima pagina). Le picture non mi servono nella macro, ecco che le relative righe le ho trasformate in commento..

                    + l'excel di prova

                    Allegati:
                    You must be logged in to view attached files.
                    #33117 Score: 0 | Risposta

                    RitaTakk
                    Partecipante

                      Grazie alfrimpa per il video.

                      Ma nella fretta di inserire la macro non ho visto che nel link originale di rollis13 c'era anche l'indicazione...  "when you need to create one slide for every row in Excel"      Ora provo.    Grazie!!!

                       

                      #33118 Score: 0 | Risposta

                      RitaTakk
                      Partecipante

                        Funziona!!! 

                        L'unico neo:  inserisce una slide vuota anziché copiare la prima.

                        Quindi devo modifciare AddSlide, dicendoli (in modo appropriato) di non Add...[..]LayoutBlank, ma di .. ActivePresentation.SlideMaster(1).Copy    and .paste  ?

                        Sub AddSlides()
                        Dim Pre As Presentation
                        Dim Sld As Slide
                        Set Pre = ActivePresentation
                        'Set Sld = Pre.Slides.Add(Pre.Slides.Count + 1, ppLayoutBlank)
                        Pre.Slides(Pre.Slides.Count).Select
                        End Sub

                        Aiuto! L'ultimo.  

                         

                        #33120 Score: 0 | Risposta

                        rollis13
                        Partecipante
                          8 pts

                          RitaTakk ha scritto: ...è che non incolli sulla prima slide tutte le caselle di testo ("n" quante sono le righe in excel

                          Verso la fine della pagina del Link c'era anche la versione per una riga Excel per ogni nuova slide inserita (macro preceduta da "Updated" o giù di li).

                          #33122 Score: 0 | Risposta

                          RitaTakk
                          Partecipante

                            Sì, rollis13, esatto, funziona, ma fa una nuova slide vuota per ogni riga excel. 

                            In fondo al tuo link qualcuno pone la domanda ultima che serve a me:  come copio la prima slide.. anziché creare slide vuote.. ? Credo che modificando la subroutine AddSlides dovrebbe essere possibile. Se uno è capace..  Idea?  

                            #33123 Score: 0 | Risposta

                            rollis13
                            Partecipante
                              8 pts

                              Questo è uno snippet per duplicare la prima slide, ora basta 'infilarlo' nel ciclo Do/While della macro prima di leggere nuovi dati da Excel:
                              ActivePresentation.Slides(1).Duplicate

                              #33125 Score: 0 | Risposta

                              Raffaele53
                              Partecipante
                                24 pts

                                Pure io avevo già la slide, volevo vedere quali "shapes" avevi creato nel Tuo...
                                Pensavo che all'interno avresti messo solo Nome & Cognome... Perchè sono tre?

                                Per la slide-nuova copiata dalla prima, questo funziona (2013). Se dovrai mettere i Nome & Cognome nei shapes devo ripensarci. Comunque, si chiamano Picture 9,Picture 11,Picture 13, Picture 26 (credo sia il disegno)

                                Ps Se invece Ti va bene il Tuo sistema, bisogna trovare il modo d'ancorare la tua scritta ad una certa altezza

                                Allegati:
                                You must be logged in to view attached files.
                                #33131 Score: 0 | Risposta

                                RitaTakk
                                Partecipante

                                  rollis13 ha scritto:

                                  Questo è uno snippet per duplicare la prima slide, ora basta 'infilarlo' nel ciclo Do/While della macro prima di leggere nuovi dati da Excel: ActivePresentation.Slides(1).Duplicate

                                  Rollis..  sbaglio effettivamente qualcosa mettendo male lo snippet      (capra)    Dove devo metterlo?  Giuro, farò un corso prossimamente..

                                  Do While Id > 0
                                  ActivePresentation.Slides(1).Duplicate
                                  INumber = XL.Sheets(1).Cells(x, 2)
                                  Odate = XL.Sheets(1).Cells(x, 3)
                                  Summary = XL.Sheets(1).Cells(x, 4)
                                  Duration = XL.Sheets(1).Cells(x, 5)
                                  Detection = XL.Sheets(1).Cells(x, 6)
                                  Set sh = ActivePresentation.Slides(ActivePresentation.Slides.Count).Shapes.AddTextbox(msoTextOrientationHorizontal, 30, 10, 145, 100)
                                  sh.TextFrame.TextRange.Font.Size = 29
                                  sh.TextFrame.TextRange.Text = "INumber: " & Trim(INumber) & vbNewLine & _
                                  "Odate: " & Trim(Odate) & vbNewLine & _
                                  "Summary: " & Trim(Summary) & vbNewLine & _
                                  "Duration: " & Trim(Duration) & vbNewLine & _
                                  "Detection: " & Trim(Detection) & vbNewLine & _
                                  "Id : " & Right("00000" & Trim(CStr(Id)), 5)

                                  'Next Row
                                  x = x + 1
                                  Id = XL.Sheets(1).Cells(x, 1)
                                  Loop

                                   

                                   

                                  .. & Raffaele, ho cambiato macro prendendo l'esempio dal link di Rollis. Hai ragione anche tu, bisogna pensare a dove inserire la casella, ma per il mmento vorrei che funzionasse la base...  Grazie!

                                  #33132 Score: 0 | Risposta

                                  rollis13
                                  Partecipante
                                    8 pts

                                    Partendo da un'unica slide, pulita con la sola immagine e senza caselle di testo, quale slide 'master' ed file Excel con i dati nelle prime 3 colonne (senza righe vuote tra i dati) prova con questi adattamenti. Al termine ti rimane la slide master da eliminare (a regime si può gestire direttamente dalla macro).

                                    Option Explicit
                                    Sub MailMergeWithExcel_test()
                                        Dim XL     As Excel.Workbook
                                        Dim colA   As String
                                        Dim colB   As String
                                        Dim colC   As String
                                        Dim col()  As Variant
                                        Dim x      As Long
                                        Dim i      As Long
                                        Dim sh     As Shape
                                        Set XL = Excel.Application.Workbooks.Open("C:\Users\RitaTak\Documents\RTall\DOC_RT\CORSI_vari\__Corso_PMP\xCrsPMP14\___PMP_Crs_R\IT-xls-AoB\PPT_StampaUnione\Xls-macro-merge.xlsx")
                                        x = 2
                                        Do While XL.Sheets(1).Cells(x, 1) <> ""
                                            colA = XL.Sheets(1).Cells(x, 1)
                                            colB = XL.Sheets(1).Cells(x, 2)
                                            colC = XL.Sheets(1).Cells(x, 3)
                                            col = Array(colA, colB, colC)
                                            ActivePresentation.Slides(1).Duplicate
                                            For i = 1 To 3
                                                Set sh = ActivePresentation.Slides(2).Shapes.AddTextBox(msoTextOrientationHorizontal, 190, 190 + i * 100, 680, 0)
                                                sh.TextFrame.TextRange.Font.Size = 22
                                                sh.TextFrame.TextRange.Text = col(i - 1)
                                            Next i
                                            x = x + 1
                                        Loop
                                        XL.Close
                                        Set XL = Nothing
                                        MsgBox "Fatto"
                                    End Sub
                                    #33135 Score: 0 | Risposta

                                    Raffaele53
                                    Partecipante
                                      24 pts

                                      @rollis, bravo complimenti (non riuscivo a scrivere dentro quelle shapes)

                                      @ritatakk
                                      L'ultimo allegato creava già tutte le slide (mà la scritta si spostava). Ho trovato in rete una parte di codice che ho adattato (P1.txt). Invece il (P2.txt) è solo una "parte" neccessaria per mettere degli OVALI attorno alle scritte.

                                      Allegati:
                                      You must be logged in to view attached files.
                                      #33159 Score: 0 | Risposta

                                      RitaTakk
                                      Partecipante

                                        Santo @rollis13..  funziona, grazie, stragrazie mille!!!        (sono stata impegnatissima negli ultimi 2 giorni, finalmente stasera ho potuto provare.. e bingo, è perfetto, grazie mille!   

                                        @raffaele53:  funziona anche la tua.  Grazie davvero!!!

                                        MITICI!

                                        Per darvi.. five cents anch'io:  ho fatto grande fatica a trovare un pc con windows 7 a 32 bit... e ho provato quindi l'add-on di PPTOOLS:  funziona a meraviglia su pc con queste caratteristiche, fa esattamente quello che promette e puoi scegliere se l'output deve unire i risultati in un unico ppt oppure crearne n quante sono le slide. Oltre al costo (circa 60€ una tantum se non erro).. peccato per le caratteristiche richieste per funzionare.. ormai anacronistiche.

                                        #VivaVba

                                         

                                         

                                         

                                        #33160 Score: 0 | Risposta

                                        rollis13
                                        Partecipante
                                          8 pts

                                          Grazie per il riscontro positivo, sono contento che siamo stati di qualche aiuto .

                                          Però, vuoi mettere farsi le macro da soli senza spendere una lira ? e solo con qualche mal di testa .

                                          #33166 Score: 0 | Risposta

                                          RitaTakk
                                          Partecipante

                                            Sì, farsi da soli è pazzesco.  Devo trovare il tempo per studiare..  GRAZIE(k)

                                          Login Registrati
                                          Stai vedendo 20 articoli - dal 1 a 20 (di 20 totali)
                                          Rispondi a: Stampa unione in Powerpoint?
                                          Gli allegati sono permessi solo ad utenti REGISTRATI
                                          Le tue informazioni: