Che cos'è FileSystemObject (FSO) e come utilizzarlo in VBA Excel?

Sommario:

Anonim

Il FileSystemObject viene utilizzato per lavorare con cartelle e file collegati al sistema. Possiamo usarlo per accedere a file, cartelle, unità e flussi di testo. Non solo può accedere a file, cartelle e file di testo, ma può anche creare. Queste operazioni non sono limitate al disco rigido del sistema ma a qualsiasi dispositivo collegato al file. Significa che puoi accedere a pen drive, cd rom o unità di rete virtualmente connesse.

Queste sono le operazioni che possiamo fare usando FileSystemObject in VBA:

Per creare, aprire, leggere, scrivere ed eliminare file di testo.

Per aggiungere, modificare ed eliminare cartelle.

Per scorrere file e cartelle.

Per copiare e spostare file o cartelle in altri luoghi.

Per verificare se un file o una cartella esiste nella posizione o meno

Come accedere a FileSystemObject in VBA?

L'oggetto del file system fa parte della libreria di runtime di Microsoft Scripting. Per accedere a un FileSystemObject dobbiamo connetterci o aggiungere un riferimento al Libreria Microsoft Scripting Runtime o Scrrun.dll.

Nota: FileSystemObject non supporta il funzionamento di file binari perché Scrrun.dll supporta la creazione e la manipolazione di file utilizzando TextStream Object.

Esistono due metodi per creare FileSystemObject in VBA:

1: Creazione di oggetti FSO utilizzando il metodo CreateObject:

Usando questo metodo dichiariamo prima un tipo di oggetto variabile. Quindi imposta il riferimento dell'oggetto FSO a quella variabile usando CreateObject:

Sub LearnFso() 'Creazione della variabile oggetto Dim fso As Object 'Crea il FileSystemObject usando il metodo Create Object Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR" ) Fine sotto 

Questo metodo è dinamico e trasferibile. Significa che se condividi il codice con altri sistemi, questo codice funzionerà perfettamente. Non importa quale versione di Microsoft Runtime Scripting possiedi.

L'unico inconveniente è che non sarai in grado di vedere l'intellisense fornito da VBA. Dovrai dipendere dalle tue conoscenze per utilizzare tutte le proprietà e i metodi di FileSystemObject.

2: Creazione di oggetti FSO aggiungendo riferimenti a Microsoft Runtime Scripting

Puoi creare direttamente un FileSystemObject in VBA usando la nuova parola chiave. Per questo dovrai aggiungere un riferimento all'ultimo Microsoft Scripting Runtime nel tuo sistema.

Per aggiungere il riferimento, vai all'opzione riferimenti nel menu degli strumenti. Qui, trova la dll di Microsoft Scripting Runtime. Controllalo e fai clic su OK.

Ora sei pronto per creare e utilizzare l'oggetto FSO.

Sub LearnFso() Dim fso come nuovo FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub 

o

Sub LearnFso() Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub 

Entrambi funzioneranno bene.

Uno dei principali vantaggi di questo metodo è che sarai in grado di vedere l'intelligenza di VBA. VBA ti mostrerà tutte le proprietà e i metodi dell'oggetto fso. Dirà anche che tipo di variabili accetterà e che tipo di valore restituirà.

Se condividi questo codice con altri sistemi, dovrai dire loro di aggiungere un riferimento a Scripting Runtime dagli strumenti altrimenti otterranno un errore di compilazione che il tipo definito dall'utente non è definito. Quindi è come importare altri linguaggi di programmazione.

Nota che FSO non è una parola chiave. Puoi usarlo come nome di variabile. È solo una convenzione nominare filesystemobject come fso. Ecco perché alcune persone confondono che sia una parola chiave.

Entrambi i metodi per creare oggetti FSO hanno i loro vantaggi e svantaggi che ho menzionato mentre li spiegavo. Quindi usa secondo le tue necessità. In questo articolo, userò il secondo metodo per creare FileSystemObject.

Ora che sappiamo come creare un FileSystemObject in VBA, usiamo questa conoscenza per svolgere alcune attività significative. Voglio dire, passiamo agli esempi.

Esempio 1: ottieni tutta la sottocartella in una cartella specificata

Il primo esempio che vedremo è di ottenere i nomi delle sottocartelle da una cartella specifica.

Sub LearnFso() ' rimuove le variabili di cui avremo bisogno Dim fso As FileSystemObject ' Variabile per FileSystemObject Dim fdr As Folder ' Variabile per la cartella di base Dim subfdr As Folder ' Variabile per le sottocartelle Dim fdrpath As String 'per memorizzare il percorso di base folder 'Inizializzazione degli oggetti fdrpath = "D:\Downloads" 'Dichiarazione della cartella Set fso = New FileSystemObject 'Creazione dell'oggetto fso Set fdr = fso.GetFolder(fdrpath) 'Creazione dell'oggetto cartella di una determinata cartella 'loop per ottenere tutti i nome delle sottocartelle in For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr End Sub 

Quando esegui il codice sopra, questo è ciò che ottieni.

Sì! Questa è la mia cartella di download. Non concentrarti su quello.

Come ha funzionato?

Comprendiamo per passaggi:

1: Decaring variabili di cui avremo bisogno

Dim fso As FileSystemObject 'Variabile per FileSystemObject

Dim fdr As Folder 'Variabile per la cartella di base

Dim subfdr As Folder 'Variabile per le sottocartelle

Per prima cosa abbiamo dichiarato tutta la variabile di cui avremo bisogno in questo esempio. La prima variabile è ovviamente la fso come oggetto del file system. Le due variabili fdr e subfdr sono di tipo cartella. Useremo l'oggetto fso per creare un oggetto di tipo file invece di creare direttamente. Il fdrpath Questa variabile d'uso viene utilizzata per contenere il percorso della cartella di base di cui vogliamo ottenere tutte le sottocartelle.

2: Inizializzazione degli oggetti

fdrpath = "D:\Download" 'Dichiarazione della cartella

Set fso = New FileSystemObject 'Creazione dell'oggetto fso

Set fdr = fso.GetFolder(fdrpath) 'Creazione dell'oggetto cartella di una determinata cartella

In questo passaggio abbiamo inizializzato tutti gli oggetti che avevamo dichiarato tranne subfdr. Nota che abbiamo inizializzato la variabile del file fdr usando il metodo getFolder degli oggetti fso.

Il metodo GetFolder() di FileSystemObject prende il percorso di una cartella o directory come stringa e restituisce un oggetto di tipo file.

3: loop per ottenere il nome di tutte le sottocartelle nell'oggetto cartella

Per ogni subfdr in fdr.SubFolders

Debug.Print subfdr.Name

Subfdr successivo

Qui abbiamo usato un per ogni ciclo per scorrere ogni sottocartella nell'oggetto file fdr. Abbiamo usato la proprietà SubFolders dell'oggetto file per eseguire il ciclo.

Usiamo la proprietà name per ottenere i nomi di ogni sottocartella. Ed è fatto.

Esempio 2: Ottieni tutti i percorsi di file in una cartella e nelle sue sottocartelle

Per ottenere tutti i percorsi o i nomi completi di tutti i file in una cartella e nella sua sottocartella, è necessario aggiungere qualche riga in più nel codice di esempio 1.

Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variabile per la cartella di base Dim subfdr As Folder ' Variabile per le sottocartelle Dim fdrpath As String 'per memorizzare il percorso della cartella di base Dim fl As File 'per memorizzare l'oggetto file fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'loop per ottenere il nome di tutte le sottocartelle in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'per eseguire il loop di ogni file Debug.Print fl.Path 'ottene il nome del file Next fl Next subfdr 'per ottenere i file della cartella principale For Each fl In fdr.Files Debug.Print fl.Path Next fl End Sub 

Il metodo Folder.Files() è il metodo che restituisce i file in una sottocartella. Il metodo File.Path() restituisce l'indirizzo completo del file.

Ognuno di noi ha un ciclo interno per scorrere tutti i file nella sottocartella della cartella principale e dei suoi.

Per ottenere i file della cartella principale usiamo un altro ciclo.

Esempio 3: salvare i nomi dei file in un file CSV.

Nell'esempio precedente abbiamo imparato a stampare i percorsi dei file di cartelle specifiche nella finestra immediata. In questo esempio, impareremo come salvare quei percorsi in un file CSV. Per farlo basta aggiungere alcune righe al codice. Vedere le righe di codice in grassetto di seguito.

Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variabile per la cartella di base Dim subfdr As Folder ' Variabile per le sottocartelle Dim fdrpath As String 'per memorizzare il percorso della cartella di base Dim fl As File 'per memorizzare l'oggetto file Dim fileList As TextStream 'Un oggetto textstream fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False) 'loop per ottenere il nome di tutte le sottocartelle in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'per eseguire il ciclo di ogni file fileList.Write fl.Path & "," Next fl Next subfdr 'per ottenere il file della cartella principale For Each fl In fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub 

Qui abbiamo dichiarato un nuovo oggetto di tipo FileStream denominato elenco file

Abbiamo inizializzato la variabile filelist con un oggetto filestream usando la riga sottostante.

Imposta fileList = fso.CreateTextFile(fdrpath & "\Elenco file in questa cartella.csv", True, False)

Usiamo il metodo CreateTextFile di FSO per creare un oggetto FileStream. Crea un file di testo. Questo metodo accetta il nome di un file con un percorso completo. La prima variabile sta facendo così. Usiamo l'estensione .csv per creare un file csv. La seconda variabile viene utilizzata per consentire la sovrascrittura. Il terzo argomento è False per dichiarare che non è un file binario.

Nei loop, sostituiamo il metodo debug.print con filelist.Write per scrivere ogni percorso di file nel file creato.

Quindi sì ragazzi, ecco come potete usare FileSystemObject. L'UST può essere utilizzato per molte altre cose, di cui parleremo nei prossimi articoli. Se hai dei dubbi su questo articolo di query relative all'UST, chiedimelo nella sezione commenti qui sotto.

Iniziare con i moduli utente VBA di Excel| Spiegherò come creare un modulo in excel, come utilizzare il toolbox VBA, come gestire gli input dell'utente e infine come archiviare gli input dell'utente. Esamineremo questi argomenti utilizzando un esempio e una guida passo passo.

Variabili VBA in Excel| VBA sta per Visual Basic for Applications. È un linguaggio di programmazione di Microsoft. Viene utilizzato con applicazioni Microsoft Office come MSExcel, MS-Word e MS-Access mentre le variabili VBA sono parole chiave specifiche.

Ambito variabile VBA di Excel| In tutti i linguaggi di programmazione, abbiamo identificatori di accesso alle variabili che definiscono da dove è possibile accedere a una variabile definita. Excel VBA non fa eccezione. Anche VBA ha identificatori di ambito.

Argomenti ByRef e ByVal | Quando un argomento viene passato come argomento ByRef a una sub o funzione diversa, viene inviato il riferimento della variabile effettiva. Qualsiasi modifica apportata alla copia della variabile si rifletterà nell'argomento originale.

Elimina i fogli senza richieste di conferma utilizzando VBA in Microsoft Excel | Poiché stai eliminando i fogli utilizzando VBA, sai cosa stai facendo. Vorresti dire a Excel di non mostrare questo avviso ed eliminare il dannato foglio.

Aggiungi e salva una nuova cartella di lavoro utilizzando VBA in Microsoft Excel 2016| In questo codice, abbiamo prima creato un riferimento a un oggetto cartella di lavoro. E poi lo abbiamo inizializzato con un nuovo oggetto cartella di lavoro. Il vantaggio di questo approccio è che puoi eseguire facilmente le operazioni su questa nuova cartella di lavoro. Come salvare, chiudere, eliminare, ecc

Visualizza un messaggio sulla barra di stato VBA di Excel| La barra di stato in Excel può essere utilizzata come monitor del codice. Quando il tuo codice VBA è lungo e svolgi diverse attività utilizzando VBA, spesso disabiliti l'aggiornamento dello schermo in modo da non vedere lo sfarfallio dello schermo.

Disattiva i messaggi di avviso utilizzando VBA in Microsoft Excel 2016| Questo codice non solo disabilita gli avvisi VBA, ma aumenta anche l'efficienza temporale del codice. Vediamo come.

Articoli popolari:

50 scorciatoie di Excel per aumentare la produttività | Diventa più veloce nel tuo compito. Queste 50 scorciatoie ti faranno lavorare ancora più velocemente su Excel.

La funzione CERCA.VERT in Excel | Questa è una delle funzioni più utilizzate e popolari di Excel che viene utilizzata per cercare il valore da diversi intervalli e fogli.

CONTA.SE in Excel 2016 | Conta i valori con le condizioni usando questa fantastica funzione. Non è necessario filtrare i dati per contare valori specifici. La funzione Countif è essenziale per preparare la tua dashboard.

Come utilizzare la funzione SOMMA.SE in Excel | Questa è un'altra funzione essenziale della dashboard. Questo ti aiuta a riassumere i valori su condizioni specifiche.