Descrizione :
Un mio esempio pratico su come automatizzare inserimento e proprietà di immagini in Word.
+ Articolo :
Sebbene Word non sia lo strumento d'elezione per questo genere di operazioni, tuttavia, grazie al supporto VBA, è possibile usarlo per automatizzare l'inserimento e la modifica di immagini a livello di Document, per la creazione dinamica e successiva stampa di documenti.
Ho deciso di inserie questo articolo nel mio Blog, prendendo spunto da una soluzione data da me su un Forum tecnico, anche perchè il materiale disponibile online su Word VBA spesso è molto disordinato e, come sempre, il codice generato dal Macro Recorder non è certo oro colato.
Di seguito faccio due esempi, semplici ma non banali, sull'inserimento di immagini nuove in un Document, e sulla modifica delle propretà di immagini già presenti.
1. Nuova Immagine :
--> Inserisco un'immagine da disco in una posizione definita del documento :
Dim nuovaShape As Shape Set nuovaShape = ThisDocument.Shapes.AddPicture(FileName:="C:\Test.jpg", LinkToFile:=False, _ SaveWithDocument:=True, Left:=50, Top:=50)
--> Posso anche forzarne le dimensioni con :
Set nuovaShape = ThisDocument.Shapes.AddPicture(FileName:="C:\Test.jpg", LinkToFile:=False, _ SaveWithDocument:=True, Left:=50, Top:=50, Width:=300, Height:=200)
Ho volutamente omesso la parte riguardante il reperimento dei percorsi di tutte le eventuali immagini da caricare nel Document. Le opzioni in VBA sono molteplici, dall'uso di una semplice FileDialog, alla scansione di percorsi specifici con funzioni built-in come Dir(), o meglio con la libreria Microsoft Scripting Runtime Library ( che in genere raccomando in VB6 e VBA... ).
--> Settaggio della Posizione Dietro / Davanti al testo :
nuovaShape.ZOrder msoSendBehindText 'Dietro al testo nuovaShape.ZOrder msoBringInFrontOfText 'Davanti al testo
--> Bordo linea nero da 1 Pixel :
With nuovaShape.Line .Weight = 1# ' 1 Pixel .DashStyle = msoLineSolid ' Stile .ForeColor.RGB = RGB(0, 0, 0) 'Nero .Visible = msoTrue End With
2. Immagini Esistenti :
In questo secondo esempio invece, vado a definire alcune proprietà importanti su tutte le immagini eventualmente già presenti nel Document corrente :
Dim InS As InlineShape For Each InS In ThisDocument.InlineShapes If InS.Type = wdInlineShapePicture Then With InS.ConvertToShape 'POSIZIONE .ZOrder msoSendBehindText 'Dietro al testo 'LINEA BORDO .Line.Weight = 1# ' 1 Pixel .Line.DashStyle = msoLineSolid ' Stile .Line.ForeColor.RGB = RGB(0, 0, 0) 'Nero .Line.Visible = msoTrue 'BLOCCA PROPORZIONI .LockAspectRatio = msoFalse 'msoTrue 'DIMENSIONI .Width = 300 .Height = 200 End With End If Next InS
Come è facile vedere, anche dal "gioco di parole" tra Shapes, InlineShapes, "With InS.ConvertToShape", ecc., la gestione un po' avanzata di questi oggetti nel Word VBA non è particolarmente intuitiva.
Ciò nonostante, alla fine tutto diventa possibile ( o quasi ).
+ Fine Articolo.
1 commenti:
da inserire in modello +/- a metà pagina : per la posizione, se volessi usare segnalibro? La posizione è variabile, visto il testo inserito in precedenza in alto.
Il riempimento del modello è gestito da access a pressione di un pulsante alimenta i segnalibri con dati del record corrente dell maschera. in questa maschera è presente un grafico che dovrei riportare sul modello. è possibile farlo se si in che modo?
grazie. Aggiungo che in vba lo mastico da poco.
grazie
Posta un commento