Automation (in punta di piedi)

Ultima modifica: 28-05-2016

Anche se in questo argomento non vado molto forte, anzi debbo confessare che sono una frana, ricevendo da varie parti richieste di aiuto sull'argomento, ho deciso che non posso sempre rispondere di non conoscere assolutamente l'argomento perciò ho deciso di dedicare un po' del mio tempo anche a questo problema.

 

Come si fa da Excel a gestire altre applicazioni?

Occorre in un certo qual modo cambiare il modo di programmare, vedere altri tipi di oggetti, altri metodi di trattare i nuovi oggetti.

Ho cercato di approfondire l'argomento, anche se in modo superficiale, e sono giunto a questa semplice routine che fa uso dei segnalibri di Word per leggere i paragrafi di Word.

Prima di iniziare è bene controllare che tra i riferimenti disponibili (Strumenti => Riferimenti) ci siano Microsoft Oggice 11.0 Object Library o equivalente di altra versione (obbligatorio) e Microsoft Word 14.0 Object Library o equivalente di altra versione (facoltativo).

Nella routine che sto per presentare affronto un oggetto fondamentale per Word: il Paragrafo. I paragrafi sono tanto importanti per Word quanto le celle lo sono per Excel. In questo mio approccio mi limito a compiere queste semplici operazioni:

  1. innanzitutto proteggo la mia routine con On Error Resume Next per cercare di intercettare eventuali errori in cui si potrebbe incorrere durante l'operazione
  2. quindi uso la funzione CreateObjet per impostare nella variabile MioWord un riferimento a Microsoft Word (Set MioWord = CreateObject("word.application")) che userò nella seguente istruzione
  3. apro il documento e, contemporaneamente, imposto nella variabile MioDocumento un riferimento al metodo Open("Percorso\NomeFile.Estensione") con la seguente: Set MioDocumento = MioWord.documents.Open("d:\temp\era.doc"); in questo caso accedo direttamente alla cartella dove risiede il file che mi interessa. E' ovvio che, trovandoci in situazioni diverse dovremo aver cura di cambiare il percorso e/o il nome del file.
  4. a questo punto troviamo un'istruzione che nel nostro caso è inutile (infatti è stato escluso con l'apice e facilmente attivabile cancellando l'apice per osservarne gli effetti): MioWord.Visible = True; questa istruzione renderà visibile il documento, che altrimenti rimarrà invisibile per tutta l'operazione, e potremo riferirci ad esso usando il riferimento che abbiamo memorizzato in MioWord e MioDocumento
  5. a questo punto contiamo i paragrafi contenuti nel documento con: A = MioDocumento.paragraphs.Count
  6. il ciclo che segue legge il contenuto di ciascun paragrafo presente nel documento e ne pone il contenuto in una variabile (MiaFrase)
    For I = 1 To A
    Set MiaFrase = MioDocumento.paragraphs(I).Range
    MsgBox "La " & I & "° frase" & vbCr & MiaFrase
    Next

    una volta in possesso di tale frase possiamo farci quel che vogliamo:
    1. ricerche sul contenuto
    2. cambiarne la formattazione
    3. copiarla in una cella di Excel
    4. copiarla in una MessageBox (come ho fatto io)
  7. finito il lavoro chiudiamo il documento ed usciamo da Word

Questa è la routine che propongo:

Sub ApriWord()
Dim MioWord As Object, MioDocumento As Object
Dim A, I, NumParag
Dim MiaFrase As Object
On Error Resume Next
Set MioWord = CreateObject("word.application")
Set MioDocumento = MioWord.documents.Open("d:\temp\era.doc")
' MioWord.Visible = True
A = MioDocumento.paragraphs.Count
For I = 1 To A
Set MiaFrase = MioDocumento.paragraphs(I).Range
MsgBox "La " & I & "° frase" & vbCr & MiaFrase
Next
MsgBox "ho finito"
MioDocumento.Close
MioWord.Quit
On Error GoTo 0
End Sub

Spero di fare di più la prossima volta. Ma che volete? Finora ho lavorato solo col VBA di Excel ed anche per me questo è un argomento nuovo e l'ho voluto affrontare per quanti di voi, desiderosi di fare meglio, sappiano approfittare di questa esperienza e da questa partire per nuove avventure.

Tuttavia non chiedetemi un'applicazione pratica in cui si possano usare questi metodi. Una cosa a cui può servire tutto questo potrebbe essere quella di copiare in Excel una parte, alcune parti o tutto un documento di Word.

 

Buon lavoro