FileSystemObject in VBA – Spiegato

FileSystemObject chiamato anche FSO, fornisce un facile modello basato su oggetti per accedere al file system di un computer. Devi semplicemente creare un’istanza di FileSystemObject in VBA e poi puoi generare file, leggere file, cancellare file, iterare attraverso le cartelle e fare molte altre operazioni sul file system del tuo computer.

Il FileSystemObject è presente all’interno della Microsoft Scripting Runtime Library cioè Scrrun.dll. Questa DLL supporta la creazione e la manipolazione di file usando l’oggetto TextStream e questo è il motivo per cui FSO non supporta operazioni su file binari.

Tabella dei contenuti

Usi di File System Object

FileSystemObject può essere usato per molteplici compiti come:

  • Creazione, apertura, lettura, scrittura e cancellazione di file di testo.
  • Creazione, modifica ed eliminazione di cartelle.
  • Iterazione di file e cartelle.
  • Copia e spostamento di file o cartelle.
  • Controllo dell’esistenza o meno di una posizione (percorso file).

Accesso a FileSystemObject

Il FileSystemObject comprende diverse collezioni di oggetti e ciascuna di queste collezioni di oggetti contiene informazioni su un aspetto specifico del file system. Queste collezioni sono:

Object Description
Drive Questo oggetto ti permette di ottenere informazioni su un drive collegato al tuo sistema. Per esempio, può dirvi lo spazio disponibile in un’unità, il suo nome logico, ecc. Notate che l’oggetto unità a cui ci riferiamo qui non significa necessariamente il disco rigido, può essere un CD-ROM, un’unità Flash, la RAM, o anche un’unità collegata logicamente via LAN.
Cartella Questo oggetto permette di creare, cancellare, spostare o interrogare una gerarchia di cartelle.
File Questo oggetto permette di creare, cancellare, spostare o interrogare un file.
TextStream L’oggetto TextStream ti permette di leggere o scrivere file di testo.

Quindi, diagrammaticamente un FileSystemObject può essere mostrato come:

Si noti che FSO comunica con la maggior parte degli oggetti di cui sopra in modo indiretto. Contiene solo direttamente la collezione di oggetti per “Drive”. Ogni oggetto “Drive” nella collezione “Drives” contiene una catena di oggetti “Folder”. E ogni oggetto “Folder” contiene una collezione di “File”.

Per renderlo più significativo, diciamo così: Un FileSystemObject contiene tre metodi principali per recuperare (leggere) informazioni specifiche su unità, cartelle o file, questi metodi sono GetDrive, GetFolder e GetFile rispettivamente. Ora diciamo che avete bisogno di trovare la dimensione di un particolare file, quindi creerete un’istanza del metodo GetFile e poi recupererete la sua size proprietà.

Nota: GetDrive, GetFolder e GetFile non sono gli unici metodi dentro FSO, li ho solo usati per spiegare le cose. Nella sezione seguente vedremo tutti i metodi contenuti in FileSystemObject.

Metodi FSO

La tabella sottostante fornisce dettagli sui vari metodi di FileObjectSystem e sui compiti che svolgono:

Metodo Descrizione
GetDrive, GetFolder, e GetFile Questi metodi sono usati per ottenere informazioni su Drive, Folders, e Files rispettivamente.
CreateFolder e CreateTextFile Aiuta a creare nuove cartelle o file.
DeleteFile e DeleteFolder Aiuta a cancellare file o cartelle esistenti.
CopyFile e CopyFolder Questi metodi aiutano a copiare file o cartelle da una posizione all’altra.
MoveFile e MoveFolder Questi metodi aiutano a spostare file o cartelle da una posizione ad un’altra.

Creazione di un FileSystemObject in VBA: In questa sezione, ci occuperemo di due cose:

  • Creazione di un riferimento di Microsoft Scripting Runtime Library cioè Scrrun.dll
  • Creazione di un oggetto FSO.

Creazione di un riferimento di Microsoft Scripting Runtime Library

Per creare un riferimento di Microsoft Scripting Runtime Library segui i seguenti passi:

  • Prima di tutto, apri l’editor VBA premendo “Alt + F11”.

  • Poi, vai su “Strumenti” > “Riferimento” come mostrato sopra.

  • Questo aprirà una finestra di riferimento. Qui seleziona e spunta la voce “Microsoft Scripting Runtime” e clicca “OK”.
  • Ora il riferimento a Microsoft Scripting Runtime Library è stato aggiunto.

Creazione di un oggetto FSO

Creare un oggetto FSO è semplice, segui i seguenti passi per farlo:

  • Nell’editor VBA vai su “Inserisci” > “Modulo”.

  • Ora nella finestra del modulo scrivi “Public FSO As New FileSystemObject“.
  • Questo creerà un oggetto di FileSystemObject con il nome FSO.

Dopo questo, puoi semplicemente accedere ai metodi di FileSystemObject usando l’oggetto FSO.

6 Esempi pratici di accesso a FileSystemObject

Ora passiamo ad alcuni esempi pratici di FSO:

Esempio 1: Usate FSO per trovare lo spazio libero totale di un disco.

Di seguito il codice per farlo:

'Creazione di un FileSystemObject 
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Creazione dell'unità
oggetto Space = drv.FreeSpace
Space = Space / 1073741824 'conversione di byte in GB
Space = WorksheetFunction.Round(Space, 2) 'Arrotondamento
MsgBox "C: ha spazio libero = " & Space & " GB"
End Sub

Spiegazione: In questo codice prima abbiamo creato un oggetto Drive usando il metodo ‘GetDrive‘ e poi abbiamo usato la sua proprietà ‘FreeSpace‘ per recuperare lo spazio libero.

Infine, abbiamo visualizzato lo spazio libero usando una casella di messaggio.

Nota che ci sono due proprietà per recuperare lo spazio libero di un drive cioè drv.FreeSpace e drv.AvailableSpace.

Esempio 2: Controlla se una cartella esiste o no. Se la cartella non esiste, allora crea quella cartella.

Di seguito il codice:

'Creazione di un FileSystemObject 
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Inserire il percorso della cartella da controllare:")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Allora
MsgBox "La cartella esiste!"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Cartella creata!")
End If Else MsgBox "Input sbagliato"
End If
End Sub

Spiegazione: Nel codice, abbiamo usato una funzione InputBox per ottenere il percorso della cartella dall’utente. Dopo questo, usando l’istruzione If insieme al metodo FolderExists, abbiamo controllato se la cartella è presente o no. Se la cartella non è presente, allora creiamo quella cartella usando il CreateFolder metodo.

Nota: il CreateFoldermetodo creerà solo una singola cartella alla volta. Quindi, se gli fornisci un argomento “C:\Folder1\Folder2\Folder3” allora creerà solo Folder3 dentro Folder2. Ma se Folder2 non esiste allora lancerà un errore di percorso non trovato.

Esempio 3: Scrivi un codice usando FSO per copiare una cartella da una posizione ad un’altra.

Di seguito il codice per realizzare questo:

‘Creating a FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder “C:\Source-Folder\”, “D:\Destination-Folder\”, True MsgBox “Copying Done! End Sub

Spiegazione: Nel codice, abbiamo usato il CopyFolder metodo di FSO, questo metodo accetta tre argomenti:

  • Percorso sorgente
  • Percorso destinazione
  • Un argomento booleano per specificare Overwrite Existing.

Esempio 4: Usando FileSystemObject recuperiamo la cartella Temp, la cartella System e la cartella Windows.

Per fare questo possiamo usare il seguente codice:

'Creating a FileSystemObject 
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.GetSpecialFolder(0)
System_Fldr = FSO.GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Percorso cartella Windows = " & Windows_Fldr & vbNewLine & _ "Percorso cartella System = " & System_Fldr & vbNewLine & _ "Percorso cartella Temp = " & Temp_Fldr)
End Sub

Spiegazione: Nel codice, abbiamo usato il GetSpecialFolder metodo di FSO, questo metodo accetta un singolo argomento numerico cioè 0-2.

  • FSO.GetSpecialFolder(0) – Recupera il percorso della cartella Windows.
  • FSO.GetSpecialFolder(1) – Recupera il percorso della cartella System.
  • FSO.GetSpecialFolder(2) – Recupera il percorso della cartella Local Temporary.

Esempio 5: Creare un file di testo, scriverci del contenuto, poi leggere il file, e infine cancellare il file.

Di seguito il codice per realizzare questo:

'Creazione di un FileSystemObject Public 
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
FileName = "C:\TestDirectory\File.txt" 'File da creare
'Creazione di un file e scrittura del contenuto
FileContent = InputBox("Inserire il contenuto del file")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Lettura dal file che abbiamo appena creato
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Infine cancella il file
File.Delete (True)
End If
End Sub

Spiegazione: Questo codice prima crea un file di testo, vi aggiunge il contenuto, poi lo legge, lo visualizza usando una casella di messaggio, e infine cancella quel file.

Esempio 6: Scrivere un codice VBA che può iterare tutti i file presenti in una cartella e anche recuperare la loro dimensione e data di modifica.

Il seguente codice può eseguire questo compito:

'Creazione di un FileSystemObject 
Public FSO As New FileSystemObject
Sub ListFiles()
'Dichiarazione delle variabili
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Specificare il percorso della cartella
strPath = "C:\Users\Aniee\Desktop\ExcelTrick\ "
'Crea l'oggetto di questa cartella
Set objFolder = FSO.GetFolder(strPath)
'Controlla se la cartella è vuota o no
If objFolder.Files.Count = 0 Then
MsgBox "Nessun file è stato trovato...", vbExclamation
Exit Sub
End If
'Aggiunta dei nomi delle colonne per A, B e C
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'Trova la prossima riga disponibile
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Esegui un loop per ogni file nella cartella
For Each objFile In objFolder.Files
'Elenca il nome, la dimensione e la data/ora del file corrente
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Trova la prossima riga NextRow = NextRow + 1
Next objFile
End Sub

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.