Excel - Sincronizzazione con programmi esterni lanciati con la funzione Shell

Anonimo
2012-11-29T08:42:09+00:00

Buona giornata a tutti,

Sono un nuovo iscritto al forum ed ho un problema relativo ad una applicazione VBA sviluppata per excel 2010.

Sostanzialmente la mia applicazione partendo da una cartella di lavoro esegue le seguenti attività:

1: partendo da un primo foglio scrive un file .CSV che viene utilizzato come input di un programma ( sviluppato in Fortran ) esterno.

2: Lancia il programma eseguibile esterno che genera con gli output un file .TXT

3: recupera il file .TXT in un secondo foglio ( diverso dal primo ) ed aggiorna una serie di collegamenti e valori negli altri fogli della cartella in funzione dei riusultati.

Nello sviluppo del programma ho trovato un primo ostacolo nell'utilizzo della funzione "shell" per eseguire il programma esterno. La funzione lancia il programma in maniera parallela rispetto all'esecuzione dello script VBA il che comportava probemi di sincronizzazione del file .TXT di uscita.

Questo primo problema è stato risolto mediante in frammento di codice che sostanzialmente interroga il SO e mette lo script VBA in Loop fino a che no riceve il flag di "programma terminato".

Ora  mi si pone, apparentemente, lo stesso tipo di problema anche per la fase precedente all'elaborazione dell programma esterno.

In pratica se il computer su cui faccio elaborare il foglio è particolarmente veloce in alcune occasioni il programma esterno va in crash perchè trova allocato il file .CSV scritto da excel. E' come se l'elaborazione iniziasse prima che fosse finalizzata la chiusura del file. Tenete presente che dopo aver salvato il file .CSV io faccio risalvare anche la cartella completa proprio per cercare di disallocare il file .CSV.

Per adesso ho apparentemente risolto il problema introducendo delle istruzioni VBA DoEvents ma non credo che sia il sistema più  elegante in quanto il risultato è funzione del numero di istruzioni DoEvents che introduco.

Spero che qualcuno mi sappia istruire con quale istruzione rilasciare completamente al SO il file .CSV generato da excel

Grazie per l'aiuto che mi potrete dare....

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-11-29T09:38:47+00:00

 

Spero che qualcuno mi sappia istruire con quale istruzione rilasciare completamente al SO il file .CSV generato da excel

 

Immagino che tu abbia *chiuso* ed eliminato dalla memoria il file in questione.

Creo una variabile

Assegno alla variabile il file .csv che creo

Popolo il file .csv

Salvo il file

Lo chiudo

Set a Nothing della variabile

In memoria non ho più nulla.

Ma dubito di aver capito il problema...

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-11-29T10:44:52+00:00

    Ora dopo diversi test il problema pare non si presenti più.

    Non inorridire per il metodo.....

    Grazie

    Se hai testato e funziona, bene così!

    Siamo (quasi) sempre qui se hai problemi.

    Buon lavoro, buona giornata e alla prossima.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-11-29T10:41:06+00:00

    Grazie per il consiglio,

    In effetti il metodo proposto è molto più corretto di quello che utilizzo io che, un po per mancanza di conoscenze specifiche ed un po per brevità, è quello di scrivere il file con le istruzioni:

    Sheets("TAPE5").Select

    ActiveWorkbook.SaveAs Filename:=Tape5, FileFormat:=xlCSVMSDOS, _

    CreateBackup:=False

    La tua risposta, però, mi ha suggerito un'idea, forse non molto elegante, ma che pare aver risolto il problema e cioè dopo aver dato le istruzioni precedenti aprire e chiudere il file per finalizzare le operazioni.

    Open Tape5 For Input As #1

    Close #1

    Ora dopo diversi test il problema pare non si presenti più.

    Non inorridire per il metodo.....

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento