Salvare una Cartella di Lavoro. - dal 04/09/04 pagina vista: volte

Sull'altro sito abbiamo visto come aprire una cartella di lavoro ("Aprire file o cartelle .xls"), qui ci occuperemo del salvataggio di una cartella excel.

Facciamo subito due distinzioni:

  1. salvare la cartella in quel momento attiva come aggiornamento modifiche (quindi stesso file)

  2. salvare la cartella attiva con un altro nome (quindi farne una copia)

E bene tener presente che anche se abbiamo più cartelle aperte contemporaneamente, una soltanto sarà la cartella attiva, cioè quella che stiamo vedendo aperta a video in quel momento.

Per entrambe le situazioni possiamo decidere se effettuare il salvataggio in manuale (affidandoci ad un pulsante associato alla macro che contiene le istruzioni) oppure in automatico, sfruttando un evento della cartella. L'evento che più si addice è il Workbook_BeforeClose, cioè l'evento che si verifica immediatamente prima della chiusura della cartella di lavoro. Le istruzioni da usare per il punto 1, che sfruttano il metodo Save, possono essere in alternativa:

  • ThisWorkbook.Save - La proprietà ThisWorkbook restituisce la cartella di lavoro nella quale è in esecuzione il codice Visual Basic. Nella maggior parte dei casi si tratta della cartella di lavoro attiva. Se però il codice Visual Basic fa parte di un'aggiunta, la proprietà ThisWorkbook non restituirà la cartella di lavoro attiva. In un caso del genere, la cartella di lavoro attiva è quella che richiama l'aggiunta e la proprietà ThisWorkbook restituisce la cartella di lavoro dell'aggiunta.

  • ActiveWorkbook.Save - La proprietà ActiveWorkbook restituisce sempre la cartella di lavoro attiva.

Vediamo anche come salvare e chiudere tutte le cartelle in quel momento aperte, oltre alla cartella attiva.:

  • For Each w In Application.Workbooks
    w.Save
    Next w
    Application.Quit
     
    (questa riga chiude anche Excel, se interessa tenerlo aperto, eliminare l'istruzione, ma le cartelle restano aperte.).

Questo esempio salva tutte le cartelle aperte TRANNE quella attiva, e le chiude lasciando excel aperto con la cartella attiva:

  • For Each w In Application.Workbooks
    If w.Name <> ActiveWorkbook.Name Then
    w.Close SaveChanges:=True
    End If
    Next w

Esaminiamo ora il punto 2 : salvare la cartella attiva con un altro nome. Questa necessità si ha in genere quando vogliamo creare una copia della cartella attiva. Possiamo scegliere due metodi: SaveAs e SaveCopyAs:

  • metodo SaveAs - Salva la cartella e le modifiche apportate alla cartella di lavoro in un file diverso.

  • metodo SaveCopyAs - Salva una copia della cartella di lavoro in un file ma non modifica la cartella di lavoro aperta, cioè alla chiusura della cartella originale, se ci sono state modifiche, ci verrà richiesto il salvataggio della stessa. Se avremo apportato modifiche alla cartella attiva, potremo prima di fare la copia, salvare le modifiche fatte con ActiveWorkbook.Save, e poi usare SaveCopyAs

In entrambi i metodi dovremo indicare il nome del nuovo file completo di percorso. vediamo due esempi:

  • ActiveWorkbook.SaveAs Filename:="C:\NomeCartella\Nomefile.xls", FileFormat:= _
    xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
    ,CreateBackup:=False

  • ActiveWorkbook.SaveCopyAs "C:\NomeCartella\NomeFile.xs"

Potremo decidere di assegnare nome e percorso usando variabili reperite da celle di un foglio di lavoro, o tramite InputBox. Una cosuccia interessante può essere questo esempio sotto, per eseguire copie sfruttando il metodo SaveCopyAs unito alla proprietà DefaultFilePath dell'oggetto Application. Con questa proprietà si identifica la cartella di sistema predefinita al salvataggio o apertura di file, che per WindowsXP è C:\Documents and Settings\Nome Utente\Documenti, mentre per le versioni precedenti di Windows è C:\Documenti. Aggiungiamo anche l'esempio di scrivere in una cella del foglio1 il nome che servirà  come nome per salvare il file, assegnando la cella ad una variabile: se in A1 scriveremo Pippo

Sub SalvaconNome()
Dim X As String
X = Sheets(1).[A1].Value
'con X prendiamo il nome Pippo
Y = Application.DefaultFilePath
'con Y reperiamo il percorso che mira a Documenti
ActiveWorkbook.SaveCopyAs Y & "\" & X & ".xls"
End Sub

 nella cartella Documenti ci troveremo con la copia della cartella attiva, dal nome Pippo.xls
 

Buon lavoro.

prelevato sul sito www.ennius.altervista.org