venerdì 1 maggio 2009

VBA Excel : Aprire Applicativi (programmi) da Excel

 

Aprire Applicativi (programmi) da Excel

 

Quando vogliamo aprire da Excel, un file realizzato con un altro programma, (per esempio un file di Word, un database di Access, una presentazione di PowerPoint, ecc.) dobbiamo per prima cosa aprire l'Applicativo che ha generato il file, e nell'Applicativo aperto, far aprire poi il file. L'istruzione da compilare (una macro) dovrà necessariamente prevedere l'indirizzo completo (PathName) dove risiedono sia l'eseguibile (.exe) dell'Applicativo, sia in file da aprire. Per richiamare un file faremo ricorso alla Shell di sistema inserendo i percorsi suddetti. Per fare un esempio, ipotizziamo di aprire il file Pippo.doc che si troverà nella cartella Documenti, l'istruzione quindi sarà (gli manca "qualcosa", ma è solo per vedere come costruire la stringa):

Shell ("C:\Programmi\Microsoft Office\Office\WINWORD.EXE C:\Documenti\Pippo.doc", 1)

Come vedete, abbiamo inserito il percorso, prima dell'eseguibile, poi, preceduto da uno spazio, l'indirizzo dove risiede il file, poi una virgola, indi il numero 1 che serve a far aprire il file in primo piano. Ricordo che per indicare un "percorso" si deve primo, indicare l'unità (cioè Hard-disk. Floppy, o CD-Rom) seguito dalla cartella ed ev. dalle sottocartelle dove risiede il file da aprire. (l'unità si indica sempre con Una Lettera, (C o D ecc.) seguita da due punti ( : ) e la barra rovesciata  ( \ ). Associando ad un pulsante, la macro, con un click otterremo l'apertura di Word che aprirà il file Pippo.doc, e la finestra di Word apparirà sopra quella di Excel che non viene chiuso. (L'istruzione sopra descritta, così comè, non funziona; per renderla funzionale bisogna togliere la virgola e in numero 1, così modificata, aprirebbe Word ma non ci metterebbe il focus, cioè Word sarebbe aperto, ma SOTTO la finestra di Excel). Per avere Word in vista, l'istruzione và modificata con l'aggiunta di una variabile, così:

Dim myval

myval = Shell ("C:\Programmi\Microsoft Office\Office\WINWORD.EXE C:\Documenti\Pippo.doc", 1)

Questa istruzione funziona, ma presenta due inconvenienti : il primo è che l'istruzione può diventare "chilometrica", il secondo è che non tutti si rinvengono nel trovare il percorso dell'eseguibile. Per fortuna esiste un alternativa, l'utilizzo del metodo "Start" abbinato alla Shell, che ci consente di risparmiare spazio, ma soprattutto lascia alla Shell il compito di trovare il giusto percorso dell'eseguibile. La cosa funziona solo con tutti gli eseguibili di quei programmi che, in fase di installazione, si "registrano" nel Registro di Windows. Vediamo quindi questa istruzione, la prima per aprire solo il programma (Word per esempio), la seconda per aprire Word e il file che ci interessa:

Shell ("Start Winword.exe")   oppure

Shell ("Start Winword.exe C:\Documenti\Pippo.doc")

Una precisazione l'utilizzo del metodo Start, funziona con tutte le versioni di Windows98, 98SE, ME, ma non funziona con Windows XP (non ho ancora capito perchè, anzi se qualcuno riesce a fornirmi il motivo, avrà la mia gratitudine, e sarà citato come "salvatore della patria"). Con XP è necessario usare un altro tipo di istruzione (per aprire un' altra Applicazione Microsoft da Excel), che però consente di aprire solo l'eseguibile, ed è questa:

Application.ActivateMicrosoftApp xlMicrosoftWord
(E SOSTITUISCE QUESTA: Shell ("Start Winword.exe"))

Gli Applicativi richiamabili, sono:

xlMicrosoftWord
xlMicrosoftPowerPoint
xlMicrosoftMail
xlMicrosoftAccess
xlMicrosoftFoxPro
xlMicrosoftProject
xlMicrosoftSchedulePlus


In data 01/04/03 Giuliano Gialli   giulianoyellows@inwind.it    ci fornisce una soluzione al problema Start con WindowsXP e Windows2000, sembra l'uovo di Colombo, ma bisognava pensarci, e Giuliano lo ha fatto. Questa la sua proposta, che funziona : bastava togliere Start e fare riferimento solo alla Shell, così:

Shell ("Winword.exe"), 1

oppure se si deve aprire un file predefinito, far seguire al nome dell'applicativo il percorso del file da aprire con l'applicativo stesso:

Shell ("Winword.exe C:\Documenti\Pippo.doc"), 1

Un sentito grazie a Giuliano. Le varianti sotto riportate potranno essere quindi modificate con l'utilizzo della soluzione appena esposta:

Queste sono 2 varianti per aprire Word ed il file, è necessario il  path completo anche di WordXP che su WindowsXP è diverso dalle altre versioni:
Dim myVal
myVal = Shell("C:\Programmi\Microsoft Office\Office10\WinWord.exe  C:\Documents And Settings\Nome Utente\Documenti\Pippo.doc", 1)

Variante Giuliano:

Shell("WinWord.exe  C:\Documents And Settings\Nome Utente\Documenti\Pippo.doc"), 1

Seconda variante in due mosse:
la prima consiste in una variabile fissa (X) che porta il path completo, simile alla precedente:
Dim X
X = "C:\Programmi\Microsoft Office\Office10\WinWord.EXE C:\Documents And Settings\Nome Utente\Documenti\Pippo.doc")
myVal = Shell(X, 1)


Variante1 Giuliano:

Dim X
X = "C:\Documents And Settings\Nome Utente\Documenti\Pippo.doc"
Shell ("WinWord.exe " & X & ""), 1


La seconda, più interessante perchè consente di poter variare sia il nome dell'eseguibile, sia il nome del file da aprire, legge i percorsi posti in due celle del foglio di lavoro
mettiamo in A1 il path di Word  e in A2 il path del file: cambiando inA2 il percorso possiamo mirare a qualunque file .doc , in qualsiasi cartella si trovi


Dim X
X = Range("A1").Value & " " & Range("A2").Value
myVal = Shell(X, 1)


Variante2 Giuliano:

Dim X
X = (Range("A1").Value) & " " & (Range("A2").Value)
Shell (X), 1

(il numero 1 che vediamo nell'istruzione serve per mettere il focus su Word)

Nessun commento:

Posta un commento