Livello tecnico: Conoscenza di base di Visual Basic for Applications Si applica a: Excel (2003/2007/2010/2013)
Dettagli
NOTA. Gli esempi ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per un loro uso scorretto. Utilizzate gli esempi forniti o file di prova per i vostri test. La correzione delle eccezioni (errori) e il controllo del tipo di dati inserito è solo parziale. I file vogliono essere un semplice esempio che illustra come sia possibile automatizzare Excel e sono forniti solo a scopo dimostrativo.
Situazione.
A volte ci troviamo nella condizione di dover lavorare un file che si trova in una chiave USB. Questo può accadere anche *in trasferta*, quindi non sappiamo quale lettera verrà assegnata alla chiave USB.
Come fare.
Ecco una funzione che ci consente di recuperare la lettera assegnata alla chiave USB. La funzione va copia/incollata in un modulo standard:
Public Function f() As String
Dim objFSO As Object
Dim colDrives As Object
Dim objDrive As Object
f = "Nessun drive mobile"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
For Each objDrive In colDrives
If objDrive.IsReady = True Then
If objDrive.DriveType = 1 Then
f = objDrive.DriveLetter
End If
End If
Next
Set objDrive = Nothing
Set objFSO = Nothing
Set colDrives = Nothing
End Function
Da richiamare, ad esempio così:
Public Sub m()
MsgBox f
End Sub
E questo il risultato:
Figura 1: Lanciando la macro m() compare questa MsgBox con la lettera assegnata alla chiave USB.
Un esempio pratico.
Dobbiamo aprire il file Dati.xlsx che si trova nella chiave USB dal codice di un file situato sulla macchina nella quale abbiamo inserito la chiave. Vogliamo poi recuperare il valore che si trova nel Foglio1, cella A5. Questo il codice (ferma restando la presenza in un modulo standard della funzione f()):
Public Sub m()
Dim wk As Workbook
Dim sh As Worksheet
On Error GoTo RigaErrore
Set wk = Workbooks.Open(f & ":\Dati.xlsx")
Set sh = wk.Worksheets("Foglio1")
MsgBox sh.Range("A5").Value
RigaChiusura:
Set sh = Nothing
Set wk = Nothing
Exit Sub
RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusura
End Sub
E questo il risultato, conforme a quanto si trova nella cella A5, Foglio1, file Dati.xlsx nella chiave USB:
Figura 2: Lanciando la macro m() compare questa MsgBox con il valore che si trova nella cella A5, Foglio1, file Dati.xlsx nella chiave USB.
Avendo gestito l'eventuale errore, se il file non viene trovato avrei questa MsgBox(vedere nei riferimenti il link agli articoli Wiki sulla gestione degli errori e delle MsgBox):
Figura 3: L'avviso di file non trovato.
Riferimenti.
- Excel - Dove e come inserire il codice Visual Basic - VBA
- Excel - La funzione MsgBox - VBA
- Excel - Le basi per gestire le eccezioni (gli errori) - VBA
Commenti.
Sono graditi i tuoi commenti a questo articolo Wiki e, se lo ritieni interessante, per favore spunta la voce : E' stato utile all'inizio della pagina.
Grazie.
NOTA. Excel non dispone nativamente di procedure assolutamente sicure per impedire la visualizzazione e la modifica del codice vb e/o per la protezione dei fogli. E’ una cosa da tenere sempre presente quando si distribuiscono file con contenuti ritenuti delicati. Ricordate anche che è possibile lanciare il file di Excel senza che vengano eseguite le macro.
Risorse.
Avvio Pulito di Windows (courtesy of Microsoft MVP Franco Leuzzi)
Computer infettato da malware (courtesy of Microsoft MVP Vincenzo Di Russo)