FileSystemObject, jota kutsutaan myös FSO:ksi, tarjoaa helpon oliopohjaisen mallin tietokoneen tiedostojärjestelmän käyttämiseen. Sinun tarvitsee vain luoda FileSystemObjectin instanssi VBA:ssa, ja sitten voit luoda tiedostoja, lukea tiedostoja, poistaa tiedostoja, käydä läpi kansioita ja tehdä monia muita toimintoja tietokoneen tiedostojärjestelmälle.
FileSystemObject on Microsoft Scripting Runtime Libraryn sisällä eli Scrrun.dll
. Tämä DLL tukee tiedostojen luomista ja käsittelyä TextStream-objektin avulla, ja tästä syystä FSO ei tue toimintaa binääritiedostoilla.
Sisällysluettelo
File System Objectin käyttötarkoitukset
FileSystemObjectia voidaan käyttää useisiin tehtäviin, kuten:
- Tekstitiedostojen luominen, avaaminen, lukeminen, kirjoittaminen ja poistaminen.
- Kansioiden luominen, muuttaminen ja poistaminen.
- Tiedostojen ja kansioiden toistaminen.
- Tiedostojen tai kansioiden kopioiminen ja siirtäminen.
- Sijaintipaikan (tiedostopolun) olemassaolon tarkistaminen.
FileSystemObjectin käyttäminen
FileSystemObject koostuu useista objektikokoelmista, ja jokainen näistä objektikokoelmista sisältää tietoa tietystä tiedostojärjestelmän osa-alueesta. Nämä kokoelmat ovat:
Object | Description |
---|---|
Drive | Tämän objektin avulla voit saada tietoja järjestelmään liitetystä asemasta. Se voi esimerkiksi kertoa aseman käytettävissä olevan tilan, sen loogisen nimen jne. Huomaa, että tässä tarkoitettu asema-objekti ei välttämättä tarkoita kiintolevyä, vaan se voi olla CD-ROM-levy, Flash-asema, RAM-muisti tai jopa LAN:n kautta loogisesti liitetty asema. |
Kansio | Tämän objektin avulla voit luoda, poistaa, siirtää tai kysyä kansiohierarkiaa. |
Tiedosto | Tämän objektin avulla voit luoda, poistaa, siirtää tai kysyä tiedostoa. |
TextStream | TextStream-olion avulla voit lukea tai kirjoittaa tekstitiedostoja. |
Kaavioittain FileSystemObject voidaan siis esittää seuraavasti:
Huomaa, että FSO kommunikoi useimpien edellä mainittujen objektien kanssa välillisesti. Se sisältää vain suoraan ”Drives”-objektien kokoelman. Jokainen ”Drive”-objekti ”Drives”-kokoelmassa sisältää ”Folder”-objektien ketjun. Ja jokainen ”Folder”-objekti sisältää ”File”-kokoelman.
Tehdäksemme asiasta mielekkäämmän, sanotaan se näin: FileSystemObject sisältää kolme päämetodia, joilla haetaan (luetaan) tiettyjä tietoja Drives-, Folders- tai Files-olioista, nämä metodit ovat GetDrive
, GetFolder
ja GetFile
jokainen. Oletetaan, että sinun on löydettävä tietyn tiedoston koko, joten luot GetFile
metodin instanssin ja haet sen size
ominaisuuden.
Huomautus: GetDrive
, GetFolder
ja GetFile
eivät ole ainoat FSO:n sisällä olevat metodit, olen vain käyttänyt niitä selittääkseni asioita. Alla olevassa osiossa näemme kaikki FileSystemObjectin sisällä olevat metodit.
FSO:n metodit
Alla olevassa taulukossa kerrotaan yksityiskohtaisesti eri FileObjectSystem-metodeista ja niiden suorittamista tehtävistä:
Method | Description |
---|---|
GetDrive, GetFolder ja GetFile | Nämä metodeja käytetään hakemaan tietoja Drive-asemasta (asemasta), Folders (kansioista) ja Files (tiedostoista). |
CreateFolder ja CreateTextFile | Apua uusien kansioiden tai tiedostojen luomiseen. |
DeleteFile ja DeleteFolder | |
CopyFile ja CopyFolder | Nämä menetelmät auttavat tiedostojen tai kansioiden kopioinnissa paikasta toiseen. |
MoveFile ja MoveFolder | Nämä metodit auttavat siirtämään tiedostoja tai kansioita paikasta toiseen. |
FileSystemObjectin luominen VBA:ssa: Tässä osassa käsitellään kahta asiaa:
- Viittauksen luominen Microsoft Scripting Runtime Library -kirjastoon eli Scrrun.dll:iin
- FSO-objektin luominen.
Microsoft Scripting Runtime Library -kirjaston viittauksen luominen
Luo Microsoft Scripting Runtime Library -kirjaston viittaus seuraavasti:
- Avaa ensin VBA-editori painamalla ”Alt + F11”.
- Seuraavaksi siirry kohtaan ”Työkalut” > ”Viite”, kuten yllä on esitetty.
- Tällöin avautuu viiteikkuna. Tässä valitse ja tarkista merkintä ”Microsoft Scripting Runtime” ja napsauta ”OK”.
- Nyt viittaus Microsoft Scripting Runtime Libraryyn on lisätty.
FSO-objektin luominen
FSO-objektin luominen on yksinkertaista, noudata alla olevia vaiheita tämän tekemiseksi:
- VBA-editorissa navigoi kohtaan ”Insert” > ”Module”.
- Kirjoita nyt moduuli-ikkunaan ”
Public FSO As New FileSystemObject
”. - Tämä luo FileSystemObject-olion, jonka nimi on FSO.
Tämän jälkeen voit yksinkertaisesti käyttää FileSystemObject-olion metodeja käyttämällä FSO-oliota.
6 Käytännön esimerkkejä FileSystemObjectin käyttämisestä
Siirrymme nyt käytännön esimerkkeihin FSO:n käytöstä:
Esimerkki 1: Käytä FSO:ta aseman vapaan tilan kokonaismäärän selvittämiseen.
Alhaalla on koodi tähän:
'FileSystemObjectin luominen
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Aseman luominen
objekti Space = drv.FreeSpace
Space = Space / 1073741824 'tavujen muuntaminen GB:ksi
Space = WorksheetFunction.Round(Space, 2) 'Pyöristäminen
MsgBox "C::llä on vapaata tilaa = " & Space & " GB"
End Sub
Explanation:
Lopuksi olemme näyttäneet vapaan tilan viestiruudun avulla.
Huomaa, että aseman vapaan tilan hakemiseen on kaksi ominaisuutta eli drv.FreeSpace
ja drv.AvailableSpace
.
Esimerkki 2: Tarkista, onko kansio olemassa vai ei. Jos kansiota ei ole olemassa, luo kyseinen kansio.
Alhaalla on koodi:
'FileSystemObjectin luominen
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Syötä tarkistettavan kansion polku :")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Then
MsgBox "Kansio on olemassa!"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Kansio luotu!")
End If Else MsgBox "Väärä syöttö"
End If
End If
End Sub
Erittely: Koodissa olemme käyttäneet InputBox-funktiota saadaksemme käyttäjältä kansion polun. Tämän jälkeen olemme If-lauseen ja FolderExists
-metodin avulla tarkistaneet, onko kyseinen kansio olemassa vai ei. Jos kansiota ei ole, luomme kansion käyttämällä CreateFolder
metodia.
Huomautus: CreateFolder
metodi luo vain yhden kansion kerrallaan. Jos siis annat sille argumentin ”C:\Kansio1\Kansio2\Kansio3”, se luo vain kansion3 kansion2 sisälle. Mutta jos Folder2:ta ei ole olemassa, se antaa virheilmoituksen path not found.
Esimerkki 3: Kirjoita FSO:n avulla koodi, jolla voit kopioida kansion paikasta toiseen.
Alhaalla on koodi tämän toteuttamiseksi:
’FileSystemObjectin luominen Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder ”C:\Lähde-kansio\”, ”D:\Kohde-kansio\”, True MsgBox ”Kopiointi valmis!” End Sub
Erittely: Koodissa olemme käyttäneet FSO:n CopyFolder
metodia, tämä metodi hyväksyy kolme argumenttia:
- Lähdepolku
- Kohdepolku
- Boolean-argumentti, jolla määritetään Overwrite Existing.
Esimerkki 4: Käyttämällä FileSystemObjectia haetaan Temp-hakemisto, Järjestelmä-kansio ja Windows-kansio.
Tehdäksemme tämän voimme käyttää alla olevaa koodia:
'FileSystemObjectin luominen
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.GetSpecialFolder(0)
System_Fldr = FSO.GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Windows-kansion polku = " & Windows_Fldr & vbNewLine & _ "System-kansion polku = " & System_Fldr & vbNewLine & _ "Temp-kansion polku = " & Temp_Fldr)
End Sub
Explanation: Tämä menetelmä hyväksyy yhden numeerisen argumentin eli 0-2.
-
FSO.GetSpecialFolder(0)
– Noutaa Windows-kansion polun. -
FSO.GetSpecialFolder(1)
– Noutaa järjestelmäkansion polun. -
FSO.GetSpecialFolder(2)
– Noukkii Paikallisen väliaikaisen kansion polun.
Esimerkki 5: Luo tekstitiedosto, kirjoita siihen sisältöä, lue tiedosto ja poista se lopuksi.
Alhaalla on koodi tämän toteuttamiseksi:
'FileSystemObjectin luominen Public
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
Filjelytiedosto As File
Filjelytiedoston nimi = "C:\TestiHakemisto\File.txt" 'File to be created
'Tiedoston luominen ja sisällön kirjoittaminen siihen
FileContent = InputBox("Enter the File Content")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Luetaan juuri luomastamme tiedostosta
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Lopuksi Tiedoston poistaminen
File.Delete (True)
End If
End Sub
Explanation: Tämä koodi luo ensin tekstitiedoston, lisää siihen sisällön, sitten lukee sen, näyttää sen viestiruudun avulla ja lopuksi poistaa kyseisen tiedoston.
Esimerkki 6: Kirjoita VBA-koodi, joka voi iteroida kaikki kansiossa olevat tiedostot ja hakea myös niiden koon ja muutospäivämäärän.
Seuraava koodi voi suorittaa tämän tehtävän:
'FileSystemObjectin luominen
Public FSO As New FileSystemObject
Sub ListFiles()
'Muuttujien julistaminen
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Kansioiden hakemistopolun määrittäminen
strPath = "C:\Users\Aniee\Desktop\ExcelTrick\ "
'Luo tämän kansion objekti
Set objFolder = FSO.GetFolder(strPath)
'Tarkista, onko kansio tyhjä vai ei
If objFolder.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Lisää sarakkeiden A, B ja C nimet
Cells(1, "A").Value = "Tiedoston nimi"
Cells(1, "B").Value = "Koko"
Cells(1, "C").Value = "Modified Date/Time"
'Seuraavan vapaan rivin etsiminen
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Käy läpi jokainen kansiossa oleva tiedosto
For Each objFile In objFolder.Files
'Listaa nykyisen tiedoston nimi, koko ja päivämäärä/aika
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Etsi seuraava rivi NextRow = NextRow + 1
Next objFile
End Sub