Utilizzo di FileSystemObject in Excel VBA

Utilizzo di FileSystemObject (FSO) in Excel VBA

Il FileSystemObject (FSO) ti dà accesso a tutta una serie di funzioni per accedere al file system del tuo computer. Utilizzando questo oggetto, puoi accedere facilmente a file, cartelle e unità, nonché leggere e scrivere su file.

Molte delle funzioni FSO potrebbero essere scritte da te in VBA tradizionale, ma richiederebbero più codice e sarebbe più difficile da gestire e comprendere per uno sviluppatore in arrivo. L'UST è un'API (Application Programming Interface) collaudata ed è più affidabile del tuo codice. È facile da usare e pronto e disponibile.

L'UST lavora secondo gli standard e le impostazioni internazionali che hai sul tuo computer. Se stai distribuendo la tua applicazione Excel a livello globale, l'utilizzo di FSO si occuperà di eventuali differenze nelle impostazioni tra i paesi, cosa che il tuo codice avrebbe problemi a fare.

L'UST ti consentirà di fare quasi tutto nel codice VBA che potresti fare in Esplora file di Windows. Ti dà accesso completo al file system di Windows.

Creazione di un FileSystemObject

Il FileSytemObject non fa parte di Excel VBA. Puoi utilizzare FSO creando un oggetto (associazione tardiva) in VBA:

123 Sub CreateFSO()Imposta MyFSO = CreateObject("Scripting.FileSystemObject")Fine sottotitolo

In alternativa, puoi aggiungere un riferimento in VBA per la libreria FSO. Questo è chiamato associazione anticipata ed è più veloce dell'associazione tardiva, poiché l'oggetto non deve essere creato quando viene eseguito il codice.

Per aggiungere un riferimento, è necessario premere Alt-F11 per accedere all'editor di Visual Basic (VBE), quindi utilizzare "Strumenti|Riferimenti" dal menu VBE. Verrà visualizzata una finestra pop-up per selezionare il riferimento pertinente (vedi sotto).

Scorri verso il basso l'elenco dei riferimenti disponibili fino a visualizzare "Microsoft Scripting Runtime". Seleziona la casella e fai clic su OK e la libreria fa ora parte della tua applicazione.

La posizione del file della libreria DLL è C:\Windows\SysWOW64\scrrun.dll

Se stai distribuendo la tua applicazione ad altri colleghi o posizioni, è essenziale che abbiano questo file nella posizione corretta sul loro computer, altrimenti il ​​tuo codice genererà errori.

Vale la pena inserire un trap di errore sull'evento "WorkbookOpen" utilizzando il comando Dir per verificare l'esistenza del file. Se è assente, dai un messaggio di avviso e chiudi il file Excel.

Una volta aggiunto il riferimento, puoi utilizzare il seguente codice per creare l'UST:

123 SottotestFSO()Dim MyFSO come nuovo oggetto FileSystemFine sottotitolo

Tutti gli esempi in questo articolo utilizzeranno questa metodologia per creare l'UST.

L'UST dispone di molti metodi e proprietà. Questi sono qui divisi in sezioni in base a ciò che possono fare.

Utilizzo dei metodi "Esiste"

È possibile utilizzare un metodo FSO per verificare se esiste un'unità, una cartella o un file. Questi metodi sono facili da usare e richiedono un solo parametro.

123456 Sub CheckExistance()Dim MyFSO come nuovo oggetto FileSystemMsgBox MyFSO.DriveExists("C:")MsgBox MyFSO.FolderExists("C:\temp\")MsgBox MyFSO.FileExists("C:\temp\testfile.txt")Fine sottotitolo

Queste istruzioni restituiranno tutte "True" supponendo che il tuo computer abbia un'unità C:, una cartella chiamata "Temp" e un file nella cartella Temp chiamata "testfile.txt"

Le stringhe di testo nei parametri non fanno distinzione tra maiuscole e minuscole. Non è possibile utilizzare i caratteri jolly in nessuno di questi metodi.

Inoltre, non è possibile utilizzare URL (Uniform Resource Locator) per descrivere una cartella o un percorso di file. L'UST funziona esclusivamente sul sistema operativo Windows e sul relativo file system. Per una posizione del server esterno, è necessario prima mappare un'unità su questo, quindi utilizzare il percorso dell'unità stesso.

Utilizzo dei metodi "Ottieni"

L'UST dispone di numerosi metodi per ottenere informazioni sul file e sul percorso, suddividendo il percorso e il file o ottenendo informazioni su file o cartelle come la data di creazione o la data di modifica.

OttieniPercorsoAssoluto

Ciò fornirà un percorso completo dalla radice dell'unità specificata.

La sintassi è:

OttieniNomePercorsoAssoluto (pathpec)

12345 Sub AbsolutePath()Dim MyFSO As New FileSystemObject, Pth As StringPth = "c:… "MsgBox MyFSO.GetAbsolutePathName(Pth)Fine sottotitolo

Ciò restituirà una stringa "C:\Users\Richard\Documents". Questo perché il percorso è stato specificato come C: seguito da tre punti. Ogni punto indica un livello successivo all'interno della struttura delle cartelle.

OttieniNomeBase

Restituisce il nome di un file o di una cartella specificati.

La sintassi è:

OttieniNomeBase(il percorso)

12345 Nome sottobase()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C:\temp\testfile.txt"MsgBox MyFSO.GetBaseName(Pth)Fine sottotitolo

Questo codice restituirà "testfile". Il metodo restituisce l'ultima sezione nel nome del percorso. Se è un file, non restituisce il suffisso del file.

Se non è possibile trovare il percorso, verrà restituita una stringa vuota.

GetDrive

Ciò consente di utilizzare il codice per accedere alle informazioni sull'unità, in base alla lettera dell'unità specificata.

La sintassi è:

GetDrive (drivepec)

123456 Sub DriveInfo()Dim MyFSO As New FileSystemObject, Pth As String, Dr As DrivePth = "C:"Imposta Dr = MyFSO.GetDrive(Pth)MsgBox Dr.FreeSpaceFine sottotitolo

Questo metodo restituisce un oggetto unità in base all'unità specificata. È possibile utilizzare questo oggetto per accedere alle informazioni sull'unità, ad esempio lo spazio disponibile.

Stanco di cercare esempi di codice VBA? Prova AutoMacro!

Ottieni nome unità

Questo metodo separerà il nome dell'unità da una stringa di percorso/nome file.

La sintassi è:

OttieniNomeDrive (il percorso)

12345 Nome unità secondaria()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C:\temp\testfile.txt"MsgBox MyFSO.GetDriveName(Pth)Fine sottotitolo

Questo restituirà "C:"

OttieniNomeEstensione

Ciò restituirà il suffisso del file nel percorso specificato.

La sintassi è:

OttieniNomeEstensione (il percorso)

12345 Nome estensione secondaria()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C:\temp\testfile.txt"MsgBox MyFSO.GetExtensionName(Pth)Fine sottotitolo

Questo restituirà "txt".

Se non viene specificato alcun file, verrà restituita una stringa vuota.

Prendi il file

Questo metodo restituisce un oggetto file, che contiene varie informazioni sul file stesso.

La sintassi è:

Prendi il file (specifica file)

123456 Sub FileInfo()Dim MyFSO As New FileSystemObject, Pth As String, Fn As FilePth = "C:\temp\testfile.txt"Imposta Fn = MyFSO.GetFile(Pth)MsgBox Fn.DateCreatedFine sottotitolo

Ciò restituirà la data e l'ora in cui è stato creato il file specificato. Se non viene specificato alcun file o il file non esiste, verrà visualizzato l'errore "file non trovato".

12345 Nome file secondario()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C:\temp\testfile.txt"MsgBox MyFSO.GetFileName(Pth)Fine sottotitolo

Questo restituirà "testfile.txt".

OttieniCartella

Questo crea un oggetto cartella per la cartella di base nel percorso specificato. Il percorso deve contenere solo i nomi delle cartelle. Nessun nome di file deve essere incluso altrimenti si verificherà un errore.

La sintassi è:

OttieniCartella (specificacartella)

123456 SottocartellaInfo()Dim MyFSO As New FileSystemObject, Pth As String, Fo As FolderPth = "C:\temp"Imposta Fo = MyFSO.GetFolder(Pth)MsgBox Fo.DateCreatedFine sottotitolo

L'oggetto cartella contiene varie informazioni a cui è possibile accedere. In questo caso, restituisce la data di creazione della cartella.

Puoi anche utilizzare questo metodo per recuperare tutti i nomi di file all'interno di una determinata cartella:

12345678 Nomi file secondari()Dim MyFSO As New FileSystemObject, Pth As String, Fo As Folder, Fn As FilePth = "C:\temp"Imposta Fo = MyFSO.GetFolder(Pth)Per ogni Fn in Fo.FilesMsgBox Fn.NomeAvanti FnFine sottotitolo

Questo codice scorrerà la cartella "Temp" e visualizzerà ogni nome di file trovato.

OttieniNomeCartellaGenitore

Questo metodo restituirà il nome della cartella nel livello successivo nella gerarchia delle cartelle.

La sintassi è:

OttieniNomeCartellaGenitore (il percorso)

12345 Nome sottocartella()Dim MyFSO As New FileSystemObject, Pth As String, Fo As FolderPth = "C:\utenti\richard"MsgBox MyFSO.GetParentFolderName(Pth)Fine sottotitolo

Ciò restituirà "Utenti" poiché questo è il "genitore" per la cartella "richard".

Programmazione VBA | Il generatore di codice funziona per te!

Utilizzo dei metodi "Crea"

Con l'UST puoi creare una nuova cartella e percorso e creare un file di testo.

Creare una cartella

È possibile specificare un nuovo nome di percorso della cartella da creare. Un pericolo è che se la cartella esiste già, si verificherà un errore. Puoi utilizzare il metodo "FolderExists" per assicurarti che ciò non accada.

La sintassi è:

Creare una cartella(nome della cartella)

1234567 Sub CreaNuovaCartella()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C:\temp\MyFolder"Se MyFSO.FolderExists(Pth) = False ThenMyFSO.CreateFolder (Pth)Finisci seFine sottotitolo

Questo codice creerà una nuova cartella chiamata "MyFolder" nel percorso esistente "C:\temp".

CreaFileTesto

Questo metodo consente di creare un semplice file di testo e di scrivervi direttamente.

La sintassi è:

CreaFileTesto (nome del file, [ sovrascrivi, [ unicode ]])

1234567 Sub CreateTextFile()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C:\temp\Myfile.txt"Imposta Fn = MyFSO.CreateTextFile(Pth,True)Fn.Write "Aggiungi il mio testo qui" & vbLf & "Questa è la seconda riga"Fn.ChiudiFine sottotitolo

Questo codice crea un file di testo chiamato "Myfile.txt" nella cartella "Temp" dell'unità "C:" e quindi scrive due righe di testo su di esso.

Si noti che un carattere di avanzamento riga è concatenato nella stringa che viene scritta.

Se il percorso su cui stai scrivendo non esiste, si verificherà un errore. Puoi utilizzare il metodo "FolderExists" per verificarlo prima di creare il file.

C'è un parametro facoltativo per sovrascrivere il file esistente, se necessario, che può essere True o False. L'impostazione predefinita è Vero.

Utilizzo dei metodi di "copia"

È possibile utilizzare questi metodi per copiare un file o una cartella in un'altra posizione.

Programmazione VBA | Il generatore di codice funziona per te!

Copia il file

Questo metodo copierà un file da una posizione della cartella a un'altra. Si noti che la copia avrà esito negativo se la posizione di destinazione ha l'attributo di sola lettura impostato.

La sintassi è:

Copia il file fonte, destinazione, [ sovrascrivi ]

1234 Sub CopyFile()Dim MyFSO come nuovo oggetto FileSystemMyFSO.CopyFile "C:\temp\*.txt", "C:\temp\myfolder\", TrueFine sottotitolo

Questo codice farà una copia di tutti i file di testo (txt) in "C:\temp" in "C:\temp\myfolder\", sovrascrivendo il file dove necessario. L'impostazione predefinita per Sovrascrivi è True.

È possibile utilizzare un carattere jolly asterisco (*) per i nomi dei file, ma non è possibile utilizzare un carattere jolly punto interrogativo (?) per rappresentare singoli caratteri.

Copia cartella

È possibile utilizzare questo metodo per copiare un'intera cartella da una posizione a un'altra.

La sintassi è:

Copia cartella fonte, destinazione, [ sovrascrivi ]

1234 Sub CopyFolder()Dim MyFSO come nuovo oggetto FileSystemMyFSO.CopyFolder "C:\temp\*", "C:\users\richard\"Fine sottotitolo

Questo codice copia tutte le cartelle e i file sotto "C:\temp" in "C:\users\richard". La nuova cartella creata sarà "C:\users\richard\myfolder" poiché "C:\temp" aveva una cartella al suo interno chiamata "myfolder".

Ci sono quattro possibili risultati quando si utilizza questo metodo:

  • Se la destinazione non esiste, vengono copiati la cartella e il contenuto di origine.
  • Se la destinazione esiste già, si verifica un errore.
  • Se la destinazione è una cartella, verranno copiati la cartella di origine e il suo contenuto. Si verificherà un errore se Sovrascrivi è impostato su False ed è già presente una copia di un file nella destinazione.
  • Se la destinazione è impostata su sola lettura, si verificherà un errore se la sovrascrittura è impostata su false.

Questo metodo si ferma al primo errore che incontra. Non viene eseguito alcun rollback delle azioni riuscite prima che si verifichi l'errore.

Utilizzo dei metodi "Sposta"

Questi metodi possono essere utilizzati per spostare file o cartelle in altre posizioni. È come tagliare da una posizione e incollare in un'altra posizione. Si noti che se il file da spostare è aperto, il metodo Move avrà esito negativo con un errore.

SpostaFile

Questo metodo viene utilizzato per spostare un file specifico in un'altra posizione. I caratteri jolly sono consentiti nell'ultimo componente del percorso dell'origine.

La sintassi è:

SpostaFile fonte, destinazione

1234 Sub MoveAFile()Dim MyFSO come nuovo oggetto FileSystemMyFSO.MoveFile "C:\temp\*", "C:\temp\myfolder"Fine sottotitolo

Questo codice sposta tutti i file trovati in "C:\temp" in "C:\temp\myfolder".

Le cartelle di origine e di destinazione devono esistere, poiché la cartella di destinazione non viene creata automaticamente.

Questo metodo si ferma al primo errore che incontra. Non c'è alcun rollback delle azioni che hanno avuto successo prima che si verificasse l'errore.

Programmazione VBA | Il generatore di codice funziona per te!

Sposta cartella

Questo metodo sposta una cartella specifica da una posizione all'altra.

La sintassi è:

Sposta cartella (fonte, destinazione)

1234 Sotto MoveAFfolder()Dim MyFSO come nuovo oggetto FileSystemMyFSO.MoveFolder "C:\temp\myfolder", "C:\temp\mydestination"Fine sottotitolo

Questo codice sposta la cartella "myfolder" e il contenuto nella cartella "mydestination". "myfolder" viene effettivamente cancellato e viene creato "mydestination", insieme ai contenuti di "myfolder".

Se la cartella di destinazione esiste già, si verifica un errore.

Utilizzo dei metodi "Elimina"

Questi metodi vengono utilizzati per eliminare file o cartelle. Devono essere usati con cura in quanto non ci sono metodi di rollback o annullamento se qualcosa va storto.

Cancella il file

Questo elimina singoli file o un gruppo di file utilizzando i caratteri jolly.

La sintassi è:

Cancella il file specifica file, [ forza ]

1234 Sotto EliminaFile()Dim MyFSO come nuovo oggetto FileSystemMyFSO.DeleteFile "C:\temp\*"Fine sottotitolo

Questo codice cancellerà tutti i file nella cartella "C:\temp"

Il parametro Force è facoltativo ed è impostato su True o False. Se è impostato su True, i file di sola lettura verranno eliminati. L'impostazione predefinita è Falso.

Elimina cartella

Questo metodo elimina una cartella specificata e il suo contenuto.

La sintassi è:

Elimina cartella specificacartella, [ forza ]

1234 Sotto EliminaCartelle()Dim MyFSO come nuovo oggetto FileSystemMyFSO.DeleteFolder "C:\temp\MyDestination"Fine sottotitolo

Questo codice eliminerà la cartella "MyDestination" e tutti i file all'interno di quella cartella. La cartella "temp" rimarrà.

Il parametro Force è facoltativo ed è impostato su True o False. Se è impostato su True, le cartelle di sola lettura verranno eliminate. L'impostazione predefinita è Falso.

I caratteri jolly possono essere utilizzati nell'ultimo componente del percorso. Se la cartella non viene trovata, si verificherà un errore.

Questo metodo si ferma al primo errore che incontra. Non c'è alcun rollback delle azioni che hanno avuto successo prima che si verificasse l'errore.

Programmazione VBA | Il generatore di codice funziona per te!

Altri metodi nell'UST

OpenAsTextStream.

Questo metodo apre un file specificato come oggetto Text Stream e ne consente la lettura o la scrittura. Il vantaggio di questo metodo è che può aprire qualsiasi tipo di file ed estrarre il testo disponibile.

La sintassi è:

OpenAsTextStream ([ iomode, [ formato ]])

Il parametro 'iomode' consente solo lettura (1), lettura/scrittura (2) e aggiunta (8). Il parametro di lettura/scrittura sovrascrive il file.

Il parametro "formato" è impostato su -2 per l'impostazione predefinita del sistema, -1 per aprire il file come Unicode e 0 per aprire il file come ASCII (American Standard Code for Information Interchange).

1234567891011 Sub TextStream()Dim MyFSO come nuovo oggetto FileSystemImposta f = MyFSO.GetFile("C:\temp\myfile.txt")Imposta ts = f.OpenAsTextStream(2)ts.Scrivi "Il mio nuovo testo"ts.ChiudiImposta ts = f.OpenAsTextStream(1)s = ts.ReadLineMsgBox sits.ChiudiFine sottotitolo

Questo codice ottiene un file di testo esistente e lo crea come oggetto utilizzando il metodo "GetFile". Quindi apre il flusso di testo come lettura/scrittura (2) e scrive una riga di testo. Il file viene quindi chiuso e riaperto come letto (1) e da esso viene letta una riga, che viene quindi visualizzata come finestra di messaggio.

Si noti che la riga di lettura deve essere inserita in una variabile prima di poter essere visualizzata in una finestra di messaggio.

BuildPath

Questo metodo aggiungerà una cartella o un nome di file alla fine di un percorso di cartella esistente. Questo crea solo una stringa di testo e non crea effettivamente la nuova cartella.

La sintassi è:

BuildPath (il percorso, nome)

12345 Sub BuildPth()Dim MyFSO come nuovo oggetto FileSystemnp = MyFSO.BuildPath("C:\temp", "ANewFolder")MsgBox npFine sottotitolo

Verrà visualizzato "C:\temp\ANewFolder". Tuttavia, se si desidera effettivamente utilizzare questa cartella, è necessario utilizzare il metodo "CreateFolder".

Apri file di testo

Questo metodo consente di aprire e leggere o scrivere file in base ai parametri impostati. Funziona in modo simile al metodo OpenAsTextStream.

La sintassi è:

Apri file di testo (nome del file, [ iomode, [ creare, [ formato ]]])

Il parametro "iomode" consente ForReading, ForWriting e ForAppending. Il parametro ForWriting sovrascrive il file.

Il parametro "create" è un valore booleano. True significa che verrà creato un nuovo file se il nome file specificato non esiste. False significa che non verrà creato alcun file se il nome del file non viene trovato. L'impostazione predefinita è Falso.

Il parametro "format" può essere impostato su TristateFalse, TristateMixed, TristateTrue e TristateUseDefault a seconda che il file sia ASCII o Unicode.

1234567 Sub OpenTxtFile()Dim MyFSO come nuovo oggetto FileSystemSet ts = MyFSO.OpenTextFile("C:\temp\myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sits.ChiudiFine sottotitolo

Questo codice leggerà una riga dal file di testo "miofile.txt".

Un vantaggio che il metodo OpenTextFile ha rispetto a OpenAsTextStreamMethod è che ha menu a discesa per i parametri, che sono più significativi del tentativo di ricordare i valori numerici appropriati per le varie opzioni dei parametri.

Programmazione VBA | Il generatore di codice funziona per te!

Proprietà dell'UST

unità

Questa proprietà contiene una raccolta di unità disponibili sul tuo computer.

1234567 Sub Drv()Dim MyFSO As New FileSystemObject, d As DriveImposta Dr = MyFSO.DrivesPer ogni d In DrMsgBox d.DriveLetterAvanti dFine sottotitolo

Questo codice restituirà ogni lettera di unità disponibile sul tuo computer.

Nome

Restituisce il nome di un file o di una cartella specificati.

123456789 Nome secondarioEsempio()Dim MyFSO come nuovo oggetto FileSystemImposta f = MyFSO.GetFile("C:\temp\myfile.txt")i = f.Nome & " su Drive " & UCase(f.Drive) & vbCrLfi = i & "Creato: " & f.DataCreato & vbCrLfi = i & "Ultimo accesso: " & f.DateLastAccessed & vbCrLfi = i & "Ultima modifica: " & f.DateLastModifiedMsgBox ioFine sottotitolo

Questo codice fornirà il nome del file e le informazioni su di esso utilizzando la proprietà Drive.

Il percorso

La proprietà Path separerà il percorso da una specifica di file.

123456789 Sub PathEsempio()Dim MyFSO come nuovo oggetto FileSystemImposta f = MyFSO.GetFile("C:\temp\myfile.txt")i = f.Path & f.Name & " su Drive " & UCase(f.Drive) & vbCrLfi = i & "Creato: " & f.DataCreato & vbCrLfi = i & "Ultimo accesso: " & f.DateLastAccessed & vbCrLfi = i & "Ultima modifica: " & f.DateLastModifiedMsgBox ioFine sottotitolo

Questo esempio funziona allo stesso modo dell'esempio Name, tranne per il fatto che ora fornisce il percorso del file.

Programmazione VBA | Il generatore di codice funziona per te!

Taglia

La proprietà Size fornirà la dimensione di una cartella o di un file.

12345 Sub Fsize()Dim MyFSO come nuovo oggetto FileSystemImposta f = MyFSO.GetFolder("C:\temp\")MsgBox f.SizeFine sottotitolo

Questo codice sopra restituirà la dimensione della cartella "C:\temp\".

12345 Sub Fsize()Dim MyFSO come nuovo oggetto FileSystemImposta f = MyFSO.GetFile("C:\temp\myfile.txt")MsgBox f.SizeFine sottotitolo

Questo codice sopra restituirà la dimensione del file 'myfile.txt'.

Tipo

La proprietà type restituirà il testo per il tipo di file o cartella.

12345 Sottotipo F()Dim MyFSO come nuovo oggetto FileSystemImposta f = MyFSO.GetFolder("C:\temp\")MsgBox f.TypeFine sottotitolo

Questo codice sopra restituirà il testo "Cartella file".

12345 Sottotipo F()Dim MyFSO come nuovo oggetto FileSystemImposta f = MyFSO.GetFile("C:\temp\myfile.txt")MsgBox f.TypeFine sottotitolo

Questo codice sopra restituirà il testo "Documento di testo".

Nota l'uso di "GetFolder" e "GetFile" in ogni esempio.

wave wave wave wave wave