Funzione VBA DIR: una semplice spiegazione con esempi

VBA ha alcune funzioni utili che possono portare la tua automazione in Excel al livello successivo.

Una di queste funzioni è il Funzione DIR VBA.

Anche se di per sé, può sembrare una semplice funzione che fa una cosa specifica.

Ma quando lo combini con altri elementi utili del linguaggio di codifica VBA, puoi creare cose potenti (trattate negli esempi più avanti in questo tutorial).

Che cosa fa la funzione Dir VBA?

Utilizzare la funzione VBA DIR quando si desidera ottenere il nome del file o di una cartella, utilizzando il nome del percorso.

Per farti un esempio, se hai un file Excel in una cartella, puoi usare la funzione VBA DIR per ottenere il nome di quel file Excel (o qualsiasi altro tipo di file).

Cosa succede se voglio ottenere i nomi di tutti i file Excel nella cartella (o tutti i file, che si tratti di file Excel o meno)?

Puoi farlo anche tu!

Quando usi la funzione DIR una volta, restituisce il nome del primo file in una cartella. Ora, se vuoi ottenere anche i nomi del secondo, terzo, quarto file, puoi utilizzare nuovamente la funzione DIR (trattata in seguito come esempio).

Dir restituisce il nome del primo file che corrisponde al percorso. Per ottenere altri nomi di file che corrispondano al percorso, chiama Dir di nuovo senza argomenti. Quando non ci sono più nomi di file corrispondenti, Dir restituisce una stringa di lunghezza zero (""). Trattati negli esempi 3 e 4 più avanti in questo tutorial.

Sintassi della funzione DIR VBA

Dir [ (percorso [ , attributi ] ) ]
  • percorso: questo è un argomento facoltativo. Può essere il nome del file, il nome della cartella o il nome della directory. Se il percorso non viene trovato, la funzione DIR VBA restituisce una stringa di lunghezza zero ("")
  • attributi: questo è un argomento facoltativo. È possibile utilizzare questo argomento per specificare alcuni attributi e la funzione DIR restituirà i nomi dei file in base a tali attributi. Ad esempio, se desideri un elenco di tutti i file nascosti o di sola lettura (insieme ai file senza attributi), devi specificarlo in questo argomento.

Attributi disponibili per l'uso nella funzione DIR VBA (è possibile utilizzare uno o più di questi):

Costante Valore Descrizione
vbnormale 0 (Predefinito) Specifica i file senza attributi.
vbReadOnly 1 Specifica i file di sola lettura oltre ai file senza attributi.
vbHidden 2 Specifica i file nascosti oltre ai file senza attributi.
VbSystem 4 Specifica i file di sistema oltre ai file senza attributi. Non disponibile su Macintosh.
vbVolume 8 Specifica l'etichetta del volume; se viene specificato un altro attributo, vbVolume viene ignorato. Non disponibile su Macintosh.
vbDirectory 16 Specifica directory o cartelle oltre ai file senza attributi.
vbAlias 64 Il nome file specificato è un alias. Disponibile solo su Macintosh.

Utilizzo dei caratteri jolly con la funzione DIR

Se stai lavorando con Windows, puoi anche utilizzare i caratteri jolly nella funzione DIR.

Nota che non puoi usarli quando lavori con VBA in Macintosh.

L'utilizzo dei caratteri jolly può essere utile quando:

  • Vuoi ottenere i nomi dei file di un particolare tipo di file (come .XLSX o .PPTX)
  • Quando hai un suffisso/prefisso specifico nei nomi dei file e vuoi ottenere i nomi di questi file/cartelle/directory. Ad esempio, se desideri i nomi di tutti i file con il prefisso2021-2022, puoi farlo utilizzando i caratteri jolly.

Ci sono tre caratteri jolly in Excel:

  1. * (asterisco) - Rappresenta un numero qualsiasi di caratteri. Per esempio, 2019* ti darebbe i nomi di tutti i file con il prefisso2021-2022 al suo interno.
  2. ? (punto interrogativo) - Rappresenta un singolo carattere. Ad esempio, 2021-2022? ti darebbe i nomi di tutti i file che iniziano con 2021-2022 e hanno un carattere in più nel nome (come 2021-2022A, 2021-2022B, 2021-2022C e così via)

Nota: c'è un altro carattere jolly: tilde (~). Dato che non è molto usato, ho saltato la sua spiegazione. Puoi leggere di più qui se interessati.

Funzione DIR VBA - Esempi

Ora tuffiamoci e vediamo alcuni esempi di utilizzo della funzione VBA DIR.

Esempio 1 - Ottenere il nome del file dal suo percorso

Quando hai il percorso di un file, puoi usare la funzione DIR per ottenere il nome del file da esso.

Ad esempio, il codice seguente restituisce il nome del file e lo mostra in una finestra di messaggio.

Sub GetFileNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx") MsgBox FileName End Sub

Il codice sopra utilizza una variabile "FileName" per memorizzare il nome del file restituito dalla funzione DIR. Quindi utilizza una finestra di messaggio per visualizzare il nome del file (come mostrato di seguito).

E cosa succede quando il file non esiste?

In tal caso, la funzione DIR restituirebbe una stringa vuota.

Il codice seguente utilizza un'istruzione If Then Else per verificare se il file esiste o meno. Se il file non esiste, mostra una finestra di messaggio con un testo "Il file non esiste", altrimenti mostra il nome del file.

Sub CheckFileExistence() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx") If FileName "" Then MsgBox FileName Else MsgBox "Il file non esiste" End If End Sub

Esempio 2 - Verifica se una directory esiste o meno (e crea se non esiste)

Il codice seguente controlla se la cartella "Test" esiste o meno.

Una finestra di messaggio viene utilizzata per mostrare un messaggio nel caso in cui la cartella esista o quando non esiste.

Sub CheckDirectory() Dim PathName As String Dim CheckDir As String PathName = "C:\Users\sumit\Desktop\Test" CheckDir = Dir(PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & "esiste" Else MsgBox "La directory non esiste" End If End Sub

Puoi perfezionare ulteriormente questo codice per verificare se la cartella esiste o meno e, in caso contrario, puoi utilizzare VBA per creare quella cartella.

Di seguito è riportato il codice che utilizza il Funzione MkDir per creare una cartella nel caso non esista.

Sub CreateDirectory() Dim PathName As String Dim CheckDir As String PathName = "C:\Users\sumit\Desktop\Test" CheckDir = Dir(PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & " cartella esistente" Else MkDir PathName MsgBox "È stata creata una cartella con il nome" & CheckDir End If End Sub

Esempio 3 - Ottieni i nomi di tutti i file e le cartelle in una directory

Se vuoi ottenere un elenco di tutti i nomi di file e cartelle in una directory, puoi utilizzare la funzione DIR.

Il codice seguente elenca tutti i file e i nomi delle cartelle nella cartella Test (che si trova nel percorso seguente: C:\Users\sumit\Desktop\Test\).

Sto usando Debug.Print per mostrare i nomi nella finestra immediata. Puoi anche usarlo per elencare i nomi in una finestra di messaggio o in una colonna in Excel.

Sub GetAllFile&FolderNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\", vbDirectory) Do While FileName "" Debug.Print FileName FileName = Dir() Loop End Sub

Il ciclo Do While nel codice sopra continua fino a quando tutti i file e le cartelle nel percorso indicato sono stati coperti. Quando non ci sono più file/cartelle da coprire, FileName diventa una stringa nulla e il ciclo si interrompe.

Esempio 4 - Ottieni i nomi di tutti i file in una cartella

Puoi utilizzare il codice seguente per ottenere i nomi di tutti i file in una cartella/directory (e non i nomi delle sottocartelle).

Sub GetAllFileNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\") Do While FileName "" Debug.Print FileName FileName = Dir() Loop End Sub

Questo codice è proprio come il codice usato nell'Esempio 3, con una piccola differenza.

In questo codice, non ho specificato vbDirectory nella funzione DIR. Quando specifichi vbDirectory, ti darà i nomi di tutti i file e delle cartelle.

Quando non specifichi vbDirectory, la funzione DIR ti darà solo i nomi dei file.

Nota: Se vuoi ottenere i nomi di tutti i file nella cartella principale e nelle sottocartelle, non puoi utilizzare la funzione DIR (in quanto non ricorsiva). Per fare ciò, puoi usare Power Query (nessuna codifica necessaria) o usare l'oggetto File System in VBA (con ricorsione).

Esempio 5 - Ottieni i nomi di tutte le sottocartelle all'interno di una cartella

Il codice seguente ti darebbe i nomi di tutte le sottocartelle all'interno della cartella specificata.

Usa il Funzione GetAtr in VBA, che ci permette di verificare se il nome restituito dalla funzione DIR è il nome di un file o di una cartella/directory.

Sub GetSubFolderNames() Dim FileName As String Dim PathName As String PathName = "C:\Users\sumit\Desktop\Test\" FileName = Dir(PathName, vbDirectory) Do While FileName "" If GetAttr(PathName & FileName) = vbDirectory Then Debug.Print FileName End If FileName = Dir() Loop End Sub

Ancora una volta, sto usando Debug.Print per ottenere i nomi nella finestra immediata. Puoi ottenerli in una finestra di messaggio o in Excel (modificando il codice di conseguenza).

Esempio 6 - Ottieni il primo file Excel da una cartella

Con la funzione DIR, puoi specificare l'estensione del file o qualsiasi suffisso/prefisso che desideri nel nome del file restituito.

Il codice seguente visualizzerà il nome del primo file Excel nella cartella Test.

Sub GetFirstExcelFileName() Dim FileName As String Dim PathName As String PathName = "C:\Users\sumit\Desktop\Test\" FileName = Dir(PathName & "*.xls*") MsgBox FileName End Sub

Nota che ho usato *.xls* (segno asterisco su entrambi i lati). Ciò garantirà che tutte le versioni dei file Excel siano controllate (.xls, xlsx, .xlsm, .xlsb).

Esempio 7 - Ottieni i nomi di tutti i file Excel in una cartella

Usa il codice seguente per ottenere i nomi di tutti i file Excel nella cartella Test.

Sub GetAllFileNames() Dim FolderName As String Dim FileName As String FolderName = "C:\Users\sumit\Desktop\Test\" FileName = Dir(FolderName & "*.xls*") Do While FileName "" Debug.Print FileName FileName = Dir() Loop End Sub

Mentre la funzione DIR restituisce solo il nome del primo file Excel, poiché lo stiamo chiamando di nuovo nel ciclo, passa attraverso tutti i file e ci dà i nomi di tutti i file Excel.

Spero che tu abbia trovato questo tutorial e gli esempi utili.

Fatemi sapere i vostri pensieri nella sezione commenti.

wave wave wave wave wave