image

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.

image

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à.

image

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.

image

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.