Salvare (meglio: copiare) un file sul floppy.    (31/05/03)

Un esigenza che spesso sentiamo è quella di salvare il lavoro fatto oltre che sul nostro hard-disk, anche facendone una copia su un floppy. Pratica seguita anche quando si voglia rendere disponibile una copia di un file su altri computer, magari posti nello stesso ufficio ma non collegati in rete, oppure per tutti coloro che a fine lavoro vogliono crearsi una copia di riserva da conservare su un floppy. In questo esercizio  prenderemo in esame la copia della cartella aperta su cui stiamo lavorando, quindi un file .xls.

La procedura di base, quella che serve per copiare il file è semplice: si basa sulla creazione di una variabile sfruttando il metodo CreateObject("Scripting.FileSystemObject"), ed assegnando poi alla variabile il percorso dove si trova il file da copiare, e la destinazione dove il file dovrà essere copiato. (Ricordo che per "percorso" si intende, in sequenza : 1) l'unità dove risiede il file - 2) la cartella ed ev. sottocartella dove risiede il file - 3) il nome del file con l'estensione). L'istruzione sarebbe molto semplice, vediamola (i nomi dei percorsi e dei file sono di esempio):

Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile "C:\ExcelWeb\Macedonia.xls", "A:\Macedonia.xls"

Dove: con Set fs settiamo una variabile CreateObject ("Scripting.FileSystemObject"), mentre con il metodo CopyFile (assegnato a fs) indichiamo (tra doppi apici) il percorso del file da copiare, virgola, seguita dal percorso per la destinazione, cioè dove vogliamo che il file venga copiato (anche questo percorso messo tra doppi apici).

Bastano solo queste due righe per eseguire la copia. Dovremo però munire la nostra routine di controlli per evitare che si generino errori, i più ricorrenti possono essere:

  • Il file da copiare non viene trovato, o perchè non ancora creato, o perchè si trova in un percorso diverso da quello impostato nelle istruzioni, o addirittura perchè il nome del file è errato.

  • Il floppy non è stato inserito nel lettore di floppy (l'unità A:\).

  • Il file è più grande (in byte) della dimensione che un floppydisk può contenere (1.437 kb)

Inoltre sarebbe opportuno decidere di volta in volta il nome con il quale vogliamo sia nominata la copia del file. Questa necessità si rivela quando, salvando periodicamente lo stesso file di origine, lo dovremo identificare nel tempo. Sarebbe comodo chiamare la copia (nell'esempio : Macedonia) Macedonia1, Macedonia2, ecc. oppure usare una data (senza le barre ( / ) : Windows NON consente di usare barre ( / ) per definire nomi di file), come Macedonia310503, oppure Macedonia010603, ecc. ecc.

Per fare ciò dovremo rendere variabile la componente "nome file" inserita nel percorso di destinazione, e dovendo per forza assegnare un nome, useremo una cella del foglio di lavoro dove scriveremo detto nome, e useremo poi il riferimento a questa cella (magari assegnando la cella a una variabile) e richiamare questa nel percorso di destinazione. A questo punto dovremo impiegare un altro controllo per verificare che nella cella scelta esista un nome. Per il controllo Errori useremo queste impostazioni:

  • On Error Resume Next  -  posto immediatamente dopo il nome della routine.

  • Resume - posto immediatamente prima della fine routine (End Sub).

  • Err.Number  - usato per intercettare la condizione : se si verifica l'errore numero....

Vediamo quindi l'intera routine, in verde i soliti commenti:

Sub SalvasuFloppy()
On Error Resume Next

'sotto: usiamo la cella C1 per scrivere il nome con il quale verrà copiato il file, e quindi 'controlliamo con : se il Range("C1") è vuoto, allora avvisiamo ed usciamo dalla routine
If Range("C1") = "" Then
MsgBox "DEVI INSERIRE UN NOME PER LA COPIA DEL FILE"
Range("C1").Select
Exit Sub
'si esce dalla routine
End If

'usiamo la variabile "nome" per memorizzare il contenuto della cella C1
nome = Range("C1").Value

'importante: poichè si presuppone di voler copiare un file esistente, su cui abbiamo 'appena lavorato, è necessario salvarlo perchè le modifiche vengano salvate sull'origine 'prima della sua copia sul floppy.
ThisWorkbook.Save
'ora controlliamo la dimensione del file che vogliamo copiare, dimensionando una variabile "miadime" per "leggere" (con la funzione FileLen( "percorso e nome")) la dimensione file, 'se sarà maggiore rispetto allo spazio di un floppy vuoto, si esce dalla routine avvisando.
Dim miadime
miadime = FileLen("C:\ExcelWeb\Macedonia.xls")
If miadime > 1457000 Then
MsgBox "LA DIMENSIONE DEL FILE E'TROPPO GRANDE. IMPOSSIBILE COPIARE"
Exit Sub
End If

'sotto vediamo l'istruzione che provvede a copiare, dove, nel percorso di destinazione, '(A:\) usiamo il nome preso nella cella C1
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile "C:\ExcelWeb\Macedonia.xls", "A:\" & nome & ".xls"


'sotto: inseriamo i due controlli errore, in cui sfruttando il numero dell'errore di run-time 'che si genererebbe se non venisse trovato percorso o nome del file da copiare (primo 'controllo) o se non fosse presente un floppy nel lettore di floppy (secondo controllo), si 'esce dalla routine.
If Err.Number = 53 Then
MsgBox "FILE DI ORIGINE NON TROVATO"
Exit Sub
End If


If Err.Number = 71 Then
MsgBox "INSERIRE UN FLOPPY NEL LETTORE"
Exit Sub
End If

'se tutto è andato liscio, si avvisa con questo messaggio:

MsgBox "COPIA ESEGUITA !"
'si cancella dalla memoria la variabile fs
Set fs = Nothing
Resume
End Sub

 

Mi sembra sia spiegato tutto abbastanza bene,

 

Buon lavoro.


prelevato sul sito http://ennius.interfree.it