Salvare la cartella su penna USB (o dovunque si desideri).

Per salvare la cartella attiva su una penna USB la soluzione più veloce è quella di chiamare la finestra di dialogo "Salva con nome" nella quale si potrà scegliere su quale unità presente sul nostro PC, compreso quindi anche unità USB connesse al PC salvare; nella finestra verrà automaticamente inserito il nome della cartella aperta, ma ognuno potrà sceglere un altro nome a piacere.

Sfrutteremo la proprietà "Dialogs" (dell'oggetto "Application") che sfrutterà il metodo Show della costante "xlDialogSaveAs"


una possibile routine di esempio potrebbe essere:

Sub SalvaFile()
nome = Application.Dialogs(xlDialogSaveAs).Show
EndSub

che produrrà la finestra che vediamo sotto, e che porta in automatico il nome del file al momento aperto da salvare e dovre avremo scelto una penna USB, vista come disco rimovibile dal SO:


Il suggerimento sopra è in aggiunta a quanto descritto nell'articolo "Salvare una cartella di lavoro" e in sostituzione di un mio articolo ormai obsoleto "Salvare (meglio: copiare) un file sul floppy", ma volendo sottilizzare, giusto per usare altre soluzioni per restare nel tema del titolo di questo articolo, vediamo come gestire il FileSystemObject per cercare l'unità (USB) che ci interessa , controllare inoltre lo spazio disponibile dell'unità, e porre la domanda se vogliamo usare questa unità o altra disponibile. Vorremo poi controllare se lo spazio disponibile sulla penna potrà accettare la dimensione del file da salvare.

Questa una possibile routine, in verde i commenti; la ricerca della penna USB si fa cercando i Drives che se restituiscono 1 significa che l'unità è rimovibile; inoltre, dato lo scompenso sicuramente esistente tra la dimensione dalla penna, in genere diversi GB, e la dimensione di una cartella che di solito è nellordine di KB, i messaggi di avviso saranno proprzionati: (sia AvaibleSpace che FileLen restituiscono sempre misure espresse in byte)

Sub CercaUSBeSalva()

On Error Resume Next
Dim fs, D, dc, Contali
Set fs = CreateObject("Scripting.FileSystemObject")
Set dc = fs.Drives
For Each D In dc
 ' inizia il ciclo che cerca tutte le unità di memorizzazione del computer

If D.drivetype = 1 Then  
 'nel caso che il tipo di drive letto restituisca 1, quindi unità rimovibile
a = D.driveletter    
 'con la variabile "a" memoriziamo la lettera di unità data dal SO
b = Format(D.AvailableSpace / 1000024, "###,00")   
' e con "b" memorizziamo il suo spazio libero in MB


'sotto: la funzione FileLen() richiede il percorso completo di unità e/o directory dove risiede il file da 'misurare: poichè dobbiamo predisporre una istruzione che legga il percorso del file ora attivo, usiamo una  'variabile (za) che legge il percorso (Path) della cartella attiva
ze = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name   
'dobbiamo quindi sapere anche la dimensione
za = Format(FileLen(ze) / 1024, "000,00")
  ' della cartella attiva ze (con la variabile za) in MB

Stringa = "Trovata Unità: " & a & " - " & D.volumename & " - " & " MB Liberi : " & b  
 'prepariamo la stringa

Dim iDom As Integer

iDom = MsgBox(Stringa & " VUOI SALVARE SU QUESTA USB ??", vbYesNo)
 ' e avvisiamo se si desidera 'salvare su questa unità


If iDom = vbYes Then 
'se la risposta sarà positiva allora controlliamo se la dimensione della cartella da
If za> b Then  '
'salvare e maggiore dello spazio libero sulla penna, se avvisiamo ed usciamo dalla routine

MsgBox "IMPOSSIBILE salvare: spazio su questa unità insufficiente"
Exit Sub
End If

Cartella = ThisWorkbook.Name  '
ActiveWorkbook.SaveCopyAs a & ":\" & Cartella
MsgBox "File salvato"
End If
End If
Next
Resume
End Sub

è evidente che se non esisteranno dischi rimovibili (o USB) nel PC la routine si esaurisce senza salvare un bel niente e senza essere avvisati.

Esistono comunque altri metodi per salvare la cartella di lavoro o comunque file del computer come ad esempio il metodo Application.GetSaveAsFilename ma di questo ne parleremo un altra volta.

buon lavoro.

 

 

 

 

prelevato sul sito www.ennius.altervista.org