Qual è FileSystemObject (UST) e come utilizzare in VBA di Excel?
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 connesso 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 controllare se un file o una cartella esiste o meno nella posizione
Come accedere a FileSystemObject in VBA?
L’oggetto del file system fa parte della libreria di Microsoft Scripting Runtime.
Per accedere a un FileSystemObject dobbiamo connetterci o aggiungere un riferimento alla 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 un oggetto UST 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() 'Creating the object variable Dim fso As Object 'Create the FileSystemObject using Create Object Method Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
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 un oggetto UST aggiungendo riferimenti a Microsoft Runtime Scripting È possibile creare direttamente un FileSystemObject in VBA utilizzando 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 strumenti.
Qui, trova la dll di Microsoft Scripting Runtime. Controllalo e fai clic su OK.
Ora sei pronto per creare e utilizzare l’oggetto UST.
Sub LearnFso() Dim fso as new FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Oppure
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 riceveranno un errore di compilazione che il tipo definito dall’utente non è definito. Quindi è come importare altri linguaggi di programmazione.
Nota che UST non è una parola chiave. Puoi usarlo come nome di variabile. È solo una convenzione chiamare filesystemobject come fso. Ecco perché alcune persone la confondono come una parola chiave. Entrambi i metodi di creazione di oggetti UST hanno i loro vantaggi e svantaggi che ho menzionato spiegandoli. 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, saltiamo agli esempi.
Esempio 1: Ottieni tutta la sottocartella in una cartella specificata Il primo esempio che vedremo è quello di ottenere i nomi delle sottocartelle da una cartella specifica.
Sub LearnFso() ' decaring variables that we will need Dim fso As FileSystemObject ' Variable for the FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder 'Intializing the objects fdrpath = "D:\Downloads" 'Declaring the folder Set fso = New FileSystemObject 'Creating the fso object Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr End Sub
Quando esegui il codice sopra, questo è quello che ottieni.
Si! Questa è la mia cartella di download. Non concentrarti su quello.
Come ha funzionato?
Comprendiamo per passaggi:
1: Decaring delle 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 tutte le variabili di cui avremo bisogno in questo esempio.
La prima variabile è ovviamente l’fso come oggetto file sytem. Le due variabili fdr e subfdr sono di tipo cartella. Useremo l’oggetto fso per creare un oggetto di tipo file invece di crearlo direttamente. La variabile fdrpath * è usata per contenere il percorso della cartella di base di cui vogliamo ottenere tutte le sottocartelle.
2: 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 In questo passaggio abbiamo inizializzato tutti gli oggetti che avevamo dichiarato tranne subfdr. Si noti che abbiamo inizializzato la variabile del file fdr utilizzando 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: ciclo per ottenere il nome di tutte le sottocartelle nell’oggetto cartella
For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr Qui abbiamo usato un ciclo per ogni ciclo per scorrere ogni sottocartella nell’oggetto file fdr. Abbiamo utilizzato la proprietà SubFolders dell’oggetto file per il ciclo.
Usiamo la proprietà name per ottenere i nomi di ogni sottocartella. Ed è fatto.
Esempio 2: Ottieni tutti i percorsi dei file in una cartella e le sue sottocartelle Per ottenere tutti i percorsi oi nomi completi di tutti i file in una cartella e nella sua sottocartella, dobbiamo aggiungere qualche riga in più nel codice dell’esempio 1.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop throgh each file Debug.Print fl.Path 'getting file name Next fl Next subfdr 'to get the files of main folder 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 file. Per ottenere i file della cartella principale utilizziamo un altro ciclo.
Esempio 3: salvare i nomi dei file in un file CSV.
Nell’esempio precedente abbiamo imparato come stampare i percorsi dei file di cartelle specifiche nella finestra immediata. In questo esempio, impareremo come salvare quei percorsi in un file CSV. Per fare ciò dobbiamo solo aggiungere alcune righe al codice. Vedere le righe di codice in grassetto di seguito.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object Dim fileList As TextStream 'A textstream object 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 to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop through each file fileList.Write fl.Path & "," Next fl Next subfdr 'to get the files of main folder 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
fileList
Abbiamo inizializzato la variabile filelist con un oggetto filestream utilizzando la riga sottostante.
Set fileList = fso.CreateTextFile (fdrpath & “\ File List in This Folder.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 lo sta facendo. 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 cicli, sostituiamo il metodo debug.print con filelist.Write per scrivere ogni percorso di file nel file creato. Quindi sì ragazzi, è così che puoi 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 relativa a UST, chiedimi nella sezione commenti qui sotto.
Articoli correlati:
link: / applications-word-outlook-in-vba-get-started-with-excel-vba-userforms [Primi passi con Excel VBA UserForms]
| * Spiegherò come creare un modulo in Excel, come usarlo Toolbox VBA, come gestire gli input dell’utente e infine come memorizzare gli input dell’utente. Affronteremo questi argomenti utilizzando un esempio e una guida passo passo.
link: / general-topics-in-vba-vba-variables-in-excel [VBA variables 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.
link: / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope]
| * In tutti i linguaggi di programmazione, abbiamo specificatori di accesso alle variabili che definiscono da dove è possibile accedere a una variabile definita. Excel VBA non fa eccezione. Anche VBA ha specificatori di ambito.
link: / celle-intervalli-righe-e-colonne-in-vba-qual-è-la-differenza-tra-byref-e-byval-argomenti-vba-interview-question [Argomenti ByRef e ByVal]
| Quando un argomento viene passato come argomento ByRef a una funzione secondaria o diversa, viene inviato il riferimento della variabile effettiva. Qualsiasi modifica apportata alla copia della variabile si rifletterà nell’argomento originale.
link: / files-cartella-di-lavoro-e-fogli di lavoro-in-vba-cancella-fogli-senza-richieste-di-conferma-usando-vba-in-microsoft-excel [Elimina fogli senza richieste di conferma usando VBA in Microsoft Excel]
| Dato che stai eliminando fogli usando 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 usando VBA in Microsoft Excel 2016 | In questo codice, abbiamo prima creato un riferimento a un oggetto cartella di lavoro. E poi l’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 su La barra di stato di Excel VBA * | 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.
link: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Turn Off Warning Messages Using VBA In Microsoft Excel 2016]
| * Questo codice non solo disabilita VBA avvisa ma aumenta anche l’efficienza temporale del codice. Vediamo come.
Articoli popolari:
link: / keyboard-formula-shortcuts-50-excel-shortcuts-per-aumentare-la-produttività [50 scorciatoie Excel per aumentare la produttività]
| Diventa più veloce nel tuo compito. Queste 50 scorciatoie ti faranno lavorare ancora più velocemente su Excel.
link: / formule-e-funzioni-introduzione-di-vlookup-funzione [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. link: / tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]
| Contare i valori con le condizioni utilizzando questa straordinaria funzione. Non è necessario filtrare i dati per contare valori specifici.
La funzione Countif è essenziale per preparare la tua dashboard.
link: / excel-formula-and-function-excel-sumif-function [Come utilizzare la funzione SUMIF in Excel]
| Questa è un’altra funzione essenziale della dashboard. Questo ti aiuta a riassumere i valori su condizioni specifiche.