Lavorare con gli oggetti Word (sesta parte)
Premessa
Come già visto nelle lezioni precedenti, i requisiti fondamentali per poter interagire con gli oggetti di Word sono
due: avere installato una copia di Microsoft Word ed aver precedentemente caricato la libreria oggetti di Word disponibile nella finestra di
dialogo Riferimenti. Per una maggiore comprensione, la finestra si apre cliccando sulla voce Progetto del menu
principale e selezionando dal menu Progetto che si aprirà, la voce Riferimenti che è quella accompagnata dall'icona dei libri.
Basterà poi selezionare la voce Microsoft Word Object Library per poter utilizzare tutti gli oggetti di cui la libreria in questione
si compone.
Salve a tutti e bentornati all'appuntamento con Visual Basic per Word. Riassumiamo brevemente ciò che abbiamo
concluso la lezione scorsa. E' stato visto come applicare il "motore grammaticale" presente in Word a semplici
caselle di testo, indifferentemente TextBox o Richtextbox, permettendo così all'utente di essere informato alla
pressione di un pulsante degli eventuali errori ortografici e/o grammaticali presenti nel testo da lui inserito.
Probabilmente molti di coloro che hanno scaricato o applicato ad un proprio progetto l'esemio dell'ultima
lezione, immettendo nella casella di testo ad esempio la frase:
ciao mamma butta la pasta che oggi torno presto
si saranno visti apparire sullo schermo la finestra di messaggio che diceva:
Ci sono 0 errori ortografici e 1 errori grammaticali
Com'è possibile questo se la frase è scritta correttamente? Semplicemente perchè mentre l'errore
ortografico si ha quando si sbaglia a scrivere una parola (ad esempio: mammmma invece di mamma),
l'errore grammaticale si ha quando non si rispettano le regole della grammatica della lingua utilizzata (ad esempio:
ciao mamma butta la paste...), utilizzando cioè un plurale dove necessiterebbe il singolare e così via.
In definitiva l'errore causato dalla frase "ciao mamma butta la pasta che oggi torno presto" deriva semplicemente
dal fatto di non aver utilizzato la maiuscola all'inizio della frase. Provate così:
Ciao mamma butta la pasta che oggi torno presto
Vi sarà ritornato:
Ci sono 0 errori ortografici e 0 errori grammaticali
Quindi state attenti a non sottovalutare la vostra piccola Textbox in quanto la revisione grammaticale che si applica
ad essa è veramente potente.
Bene, adesso entriamo nel vivo della lezione. Cosa c'interessa adesso che sappiamo quanti errori sono presenti
nel testo? Un'ottima idea sarebbe quella di individuare la parola errata.
Partiamo allora a considerare gli errori grammaticali. Una parola grammaticalmente scorretta sarà quella parola
nella quale sia stato rilevati un numero di errori di grammatica maggiori o uguali (>=) ad uno.
Applichiamo questo concetto di logica al nostro caso:
...
If objDoc.ActiveWindow.Document.Words(**IndiceParola**).GrammaticalErrors.Count >= 1 Then
...
|
dove chiaramente la dicitura **IndiceParola** andrà sostituita col numero che indica la posizione della parola all'interno di tutto il documento
Word. A questo punto non possiamo far altro che creare un iterazione, ossia prendere tutto il testo del documento e per ogni sua singola parola
far individuare all'applicazione la presenza o meno di errori grammaticali.
Per far questo avremo bisogno del numero indicatore delle parole complessive rilevate nel testo. Assegnamo tale valore
ad esempio alla variabile NumeroParoleComplessive:
Dim NumeroParoleComplessive As Long
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
|
Adesso NumeroParoleComplessive ci dirà di quante parole si compone il testo.
Ora processiamo ogni singola parola con la funzione che abbiamo visto in precedenza. Vogliamo visualizzare una
seconda finestra di messaggio che, una volta processate tutte le parole, ci elenchi le parole grammaticalmente scorrette.
Inseriamo allora tutte le parole errate in una stringa di testo ParoleErrateGramm che verrà visualizzata solamente
alla fine:
Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
If objDoc.ActiveWindow.Document.Words(i).GrammaticalErrors.Count >= 1 Then
'Inseriamo anche uno spazio (vbcrlf) in modo che le parole errate vengano
'visualizzate in colonna
ParoleErrateGramm = ParoleErrateGramm & vbcrlf & objDoc.ActiveWindow.Document.Words(i)
End If
Next i
MsgBox ParoleErrateGramm
|
Il codice sopra esposto non ha senso se non viene associato al programma che abbiamo sviluppato la
volta scorsa. Includendo il nuovo listato a quello già visto, ecco come apparirà il codice completo
finora (nota: il nuovo codice è compreso tra due linee di asterischi):
'dichiarazioni di utilità generale
Dim Testo As String
Dim objDoc As Word.Document
Dim objWord As Word.Application
Option Explicit
Private Sub Command1_Click()
'seleziona l'intero documento
objDoc.ActiveWindow.Document.Select
'cancella tutta la selezione prima di assegnare un nuovo testo alla 'variabile
objDoc.ActiveWindow.Selection.Delete
'assegna il testo alla variabile
Testo = Text1.Text
'chiama la sottoprocedura ControlloOrtografico
ControlloOrtografico
End Sub
Private Sub Command2_Click()
'mostra o meno il documento Word per un controllo visivo
If Command2.Caption = "Word non visibile" Then
Command2.Caption = "Word visibile"
objWord.Visible = True
Else
Command2.Caption = "Word non visibile"
objWord.Visible = False
End If
End Sub
Private Sub Form_Load()
'imposta il nuovo oggetto Word e crea un nuovo documento
Set objWord = New Word.Application
objWord.Visible = False
Set objDoc = objWord.Documents.Add
End Sub
Public Sub ControlloOrtografico()
Dim ErroriOrtografici As Long
Dim ErroriGrammaticali As Long
'scrive sul documento il testo della TextBox
objDoc.ActiveWindow.Selection.TypeText Testo
'assegna alla variabile il numero di errori ortografici
ErroriOrtografici = objDoc.ActiveWindow.Document.SpellingErrors.Count
'assegna alla variabile il numero di errori grammaticali
ErroriGrammaticali = objDoc.ActiveWindow.Document.GrammaticalErrors.Count
'l'utente viene informato del numero di errrori presenti
MsgBox "Ci sono " & ErroriOrtografici & " errori ortografici e " _
& ErroriGrammaticali & " errori grammaticali"
'*********************************************************************
Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
If objDoc.ActiveWindow.Document.Words(i).GrammaticalErrors.Count >= 1 Then
'Inseriamo anche uno spazio (vbcrlf) in modo che le parole errate vengano
'visualizzate in colonna
ParoleErrateGramm = ParoleErrateGramm & vbcrlf _
& objDoc.ActiveWindow.Document.Words(i)
End If
Next i
MsgBox "Le parole errate sono:" & vbcrlf & ParoleErrateGramm
'*********************************************************************
End Sub
Private Sub Form_Unload(Cancel As Integer)
'chiude il documento senza salvarlo
objDoc.ActiveWindow.Close (False)
'chiude Word senza salvare nulla
objWord.Quit (False)
End Sub
|
Fatto questo facciamo un piccolo esempietto per verificare il corretto funzionamento
del codice.
Diamo l'avvio al programma e scriviamo all'interno della TextBox1 la seguente frase:
la rana. in spagna gracida in campagna
Ad occhio quanti errori grammaticali ci sono? Due: la minuscolo all'inizio
di una frase e "in" minuscolo preceduto da un punto. A questo punto la nostra applicazione
dovrebbe darci i messaggi:
ci sono 1 errori ortografici e 2 errori grammaticali
ed al termine del processo:
Le parole errate sono:
la
in
Tutto a posto, dunque. E' quindi giunto il momento di applicare lo stesso procedimento
agli errori ortografici. Vediamo in breve come fare.
Una parola ortograficamente scorretta sarà quella parola nella quale sia stato rilevati
un numero di errori di ortografia maggiori o uguali (>=) ad uno:
...
If objDoc.ActiveWindow.Document.Words(**IndiceParola**).SpellingErrors.Count >= 1 Then
...
|
dove anche questa volta la dicitura **IndiceParola** andrà sostituita col numero che indica la posizione della parola all'interno di tutto il documento
Word. Utilizzando anche in questo caso il numero totale di parole incluse nel testo, dato dalla variabile NumeroParoleComplessive,
inseriamo nel ciclo For che abbiamo visto prima, anche queste linee di codice che similmente agli errori grammaticali, processeranno gli
errori ortografici (nota: il nuovo codice è inserito tra due linee di asterischi):
Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
'*********************************************************************
Dim ParoleErrateOrt As String
'*********************************************************************
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
If objDoc.ActiveWindow.Document.Words(i).GrammaticalErrors.Count >= 1 Then
'Inseriamo anche uno spazio (vbcrlf) in modo che le parole errate vengano
'visualizzate in colonna
ParoleErrateGramm = ParoleErrateGramm _
& vbcrlf & objDoc.ActiveWindow.Document.Words(i)
End If
'*********************************************************************
If objDoc.ActiveWindow.Document.Words(i).SpellingErrors.Count >= 1 Then
ParoleErrateOrt = ParoleErrateOrt & vbcrlf _
& objDoc.ActiveWindow.Document.Words(i)
End If
'*********************************************************************
Next i
MsgBox "Le parole grammaticalmente errate sono: " & ParoleErrateGramm _
& VbCrlf & "Le parole ortograficamente errate sono:" & ParoleErrateOrt
|
A questo punto testiamo il programma nuovamente con la stessa frase di prima:
la rana. in spagna gracida in campagna
Dopo il solito messaggio che indica la presenza di un errore ortografico e due grammaticali,
il secondo messaggio ritornerà:
Le parole grammaticalmente errate sono:
la
in
Le parole ortograficamente errate sono:
spagna
Riassumiamo velocemente il codice e concludiamo così la lezione:
'dichiarazioni di utilità generale
Dim Testo As String
Dim objDoc As Word.Document
Dim objWord As Word.Application
Option Explicit
Private Sub Command1_Click()
'seleziona l'intero documento
objDoc.ActiveWindow.Document.Select
'cancella tutta la selezione prima di assegnare un nuovo testo alla 'variabile
objDoc.ActiveWindow.Selection.Delete
'assegna il testo alla variabile
Testo = Text1.Text
'chiama la sottoprocedura ControlloOrtografico
ControlloOrtografico
End Sub
Private Sub Command2_Click()
'mostra o meno il documento Word per un controllo visivo
If Command2.Caption = "Word non visibile" Then
Command2.Caption = "Word visibile"
objWord.Visible = True
Else
Command2.Caption = "Word non visibile"
objWord.Visible = False
End If
End Sub
Private Sub Form_Load()
'imposta il nuovo oggetto Word e crea un nuovo documento
Set objWord = New Word.Application
objWord.Visible = False
Set objDoc = objWord.Documents.Add
End Sub
Public Sub ControlloOrtografico()
Dim ErroriOrtografici As Long
Dim ErroriGrammaticali As Long
Dim NumeroParoleComplessive As Long
Dim i As Integer
Dim ParoleErrateGramm As String
Dim ParoleErrateOrt As String
'scrive sul documento il testo della TextBox
objDoc.ActiveWindow.Selection.TypeText Testo
'assegna alla variabile il numero di errori ortografici
ErroriOrtografici = objDoc.ActiveWindow.Document.SpellingErrors.Count
'assegna alla variabile il numero di errori grammaticali
ErroriGrammaticali = objDoc.ActiveWindow.Document.GrammaticalErrors.Count
'l'utente viene informato del numero di errrori presenti
MsgBox "Ci sono " & ErroriOrtografici & " errori ortografici e " _
& ErroriGrammaticali & " errori grammaticali"
NumeroParoleComplessive = objDoc.ActiveWindow.Document.Words.Count - 1
For i = 1 To NumeroParoleComplessive
If objDoc.ActiveWindow.Document.Words(i).GrammaticalErrors.Count >= 1 Then
'Inseriamo anche uno spazio (vbcrlf) in modo che le parole errate vengano
'visualizzate in colonna
ParoleErrateGramm = ParoleErrateGramm _
& vbcrlf & objDoc.ActiveWindow.Document.Words(i)
End If
If objDoc.ActiveWindow.Document.Words(i).SpellingErrors.Count >= 1 Then
ParoleErrateOrt = ParoleErrateOrt & vbcrlf _
& objDoc.ActiveWindow.Document.Words(i)
End If
Next i
MsgBox "Le parole grammaticalmente errate sono: " & ParoleErrateGramm _
& VbCrlf & "Le parole ortograficamente errate sono:" & ParoleErrateOrt
End Sub
Private Sub Form_Unload(Cancel As Integer)
'chiude il documento senza salvarlo
objDoc.ActiveWindow.Close (False)
'chiude Word senza salvare nulla
objWord.Quit (False)
End Sub
|
L'esempio da scaricare questa volta non c'è poichè i controlli presenti sulla form
sono gli stessi. Basterà quindi copiare e incollare il listato qui sopra per aggiornare
l'applicazione.
Inoltre volevamo scusarci per non aver trattato nella presente lezione l'argomento
'apertura della finestra di dialogo Ortografia e Grammatica' ma avrebbe reso la lezione
troppo pesante. Promettiamo comunque trattare l'argomento nel corso della prossima
guida o al massimo in quella ad essa successiva,
Alla prossima lezione e auguri di buone feste a tutti.
|