Il
contenuto del documento |
Una
volta analizzata la lista delle funzioni dal menu Macro, si
può decidere su quale particolare funzione andare ad
operare. La creazione di un report in Word rende sicuramente
necessario l'inserimento di un testo nel nuovo documento.
Seguendo pertanto le istruzioni dell'articolo precedente si
creerà innanzitutto una nuova sessione generica di
Word e ad essa si andrà ad aggiungere ed ad attivare
un documento:
Dim
appWord As Object
Dim docWord As
Object
Private
Sub
Form_Load()
Dim TestoDaInserire As
String
Dim Titolo As
String
Set appWord = CreateObject("Word.Application")
appWord.Visible = True
Set docWord = appWord.documents.Add
docWord.Activate
TestoDaInserire = "Questo testo rappresenta il
contenuto del Report in Word richiamato da un'applicazione
Visual Basic."
Titolo = "Report"
End Sub
|
Il
testo da inserire può essere incluso in una stringa
di testo, posizionata subito di seguito all'attivazione del
documento, proprio come nel caso del titolo del report.
L'inserimento del titolo unitamente al testo può essere
effettuato nel seguente modo:
With
appWord.Selection
.InsertParagraphAfter
.Font.Bold = True
.Font.Size = 12
.Font.Name = "arial"
.Paragraphs(1).Alignment = wdAlignParagraphCenter
.TypeText Titolo
.TypeParagraph
.TypeParagraph
.InsertParagraphAfter
.Font.Bold = False
.Font.Size = 10
.Font.Name = "arial"
.Paragraphs(1).Alignment = wdAlignParagraphJustify
.TypeText TestoDaInserire
End With |
Utilizzando
il codice sopra si possono visualizzare degli errori dati
dalla mancata definizione delle costanti di allineamento dei
paragrafi (rispettivamente wdAlignParagraphCenter e wdAlignParagraphJustify).
Non avendo importato infatti la libreria Word, anche le costanti
ad essa legate non sono definite.
Sarà quindi necessario definirle all'inizio del progetto,
nel seguente modo:
Private
Const
wdAlignParagraphCenter = 1
Private Const wdAlignParagraphJustify
= 3
|
Adesso che il report ha preso una certa forma è necessario
ritornare alla trattazione delle funzioni interne di Word.
Di certo si vorrà evitare che l'utente rimuova il testo
semplicemente premendo il pulsante Annulla (Undo).
E' pertanto necessario disabilitare questa caratteristica.
La funzione di Word che si occupa di compiere tale operazione
è ModificaAnnulla come mostrato nella finestra Macro
sottostante:
Disabilitare
l'annullamento di un comando o della digitazione di un testo
significa andare a scrivere una funzione ModificaAnnulla (quindi
col medesimo nome della funzione interna di Word), con un
codice differente, in modo che questa si sovrapponga ed annulli
la funzione di default.
Il grafico sottostante schematizza questo processo:
In
realtà esistono varie relazioni tra una funzione interna
a Word ed una con lo stesso nome generata tramite una macro.
Esiste la sovrapposizione come nel caso del grafico: mentre
la funzione di default si trova nel modello Normal, la nuova
funzione si trova esclusivamente in un modulo di codice dell'editor
VBA all'interno del documento aperto.
In questo modo la nuova funzione sostituirà quella
di default finchè il documento non verrà chiuso.
Esiste poi la sostituzione, modalità di cui fanno uso
i virus delle macro: la funzione creata viene salvata proprio
nel modello Normal, andando così a sovrascrivere la
funzione di Word.
All'apertura di qualsiasi documento generato da quel modello
Normal, la nuova funzione verrà così attivata.
Per comprendere come e dove scrivere una nuova funzione, è
necessario analizzare la struttura dei moduli dell'editor
di codice VBE.
A tale scopo aprire l'editor tramite Strumenti->Macro->Visual
Basic Editor.
Apparirà un ambiente di sviluppo simile al classico
di Visual Basic. E sulla colonna di sinistra sarà riportata
una struttura simile a quella mostrata in figura:
dove
Normal rappresenta il modello col quale è stato generato
il documento e Project (NomeDocumento) rappresenta il documento
corrente.
Il modulo di codice evidenziato e denominato NewMacros rappresenta
il contenitore delle macro generate dallo sviluppatore ed
applicabili a tutti i documenti Word. Questo significa che
è stato deciso di scrivere delle macro all'interno
del modello Normal.
Per generare un nuovo modulo di macro applicabile unicamente
al documento attivo (cioè al report generato dall'applicazione
Visual Basic) si dovrà inserire il seguente blocco
di codice:
Dim
NewModule As Object
Set NewModule = appWord.activedocument.VBProject.VBComponents.Add(1)
NewModule.Name = "ModuloMacro"
|
Il
risultato dovrebbe rispecchiare il contenuto della figura
sottostante:
Questo
nuovo modulo di codice sarà il punto di partenza per
andare a scrivere la nuove funzioni.
|