› Sviluppare funzionalita su Microsoft Office con VBA › Stampa unione in Powerpoint?
-
AutoreArticoli
-
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.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à.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..
Ciao Rita
Prova a guardare questo video secondo me puoi trarre spunti interessanti
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.
Interessante il Link, tanto per "provarci" puoi allegare la Tua Slide?
Ps. Uso 2013, non credo ci siano problemi di compabilità
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)
LoopRaffaele.. 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.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!!!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 SubAiuto! L'ultimo.
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).
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?
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).DuplicatePure 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.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!
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@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.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
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
. -
AutoreArticoli
