Jak używać FileSystemObject w VBA?

112

Czy jest coś, do czego muszę się odwołać? Jak tego używać:

Dim fso As New FileSystemObject
Dim fld As Folder
Dim ts As TextStream

Otrzymuję błąd, ponieważ nie rozpoznaje on tych obiektów.

l --''''''--------- '' '' '' '' '' ''
źródło

Odpowiedzi:

178

W programie Excel musisz ustawić odwołanie do biblioteki wykonawczej skryptów VB. Odpowiedni plik zwykle znajduje się pod adresem\Windows\System32\scrrun.dll

  • Aby odwołać się do tego pliku, załaduj Edytor Visual Basic ( ALT+ F11)
  • Z menu rozwijanego wybierz opcję Narzędzia> Referencje
  • Zostanie wyświetlona lista dostępnych odniesień
  • Zaznacz pole wyboru obok „ Microsoft Scripting Runtime
  • Pełna nazwa i ścieżka do scrrun.dllpliku zostaną wyświetlone poniżej pola listy
  • Kliknij OKprzycisk.

Można to również zrobić bezpośrednio w kodzie, jeśli został włączony dostęp do modelu obiektowego VBA.

Dostęp można włączyć, zaznaczając pole wyboru Trust access to the VBA project object modelznajdujące się w Plik> Opcje> Centrum zaufania> Ustawienia Centrum zaufania> Ustawienia makr

Ustawienia makr VBA

Aby dodać odniesienie:

Sub Add_Reference()

    Application.VBE.ActiveVBProject.References.AddFromFile "C:\Windows\System32\scrrun.dll"
'Add a reference

End Sub

Aby usunąć odniesienie:

Sub Remove_Reference()

Dim oReference As Object

    Set oReference = Application.VBE.ActiveVBProject.References.Item("Scripting")

    Application.VBE.ActiveVBProject.References.Remove oReference
'Remove a reference

End Sub
Robert Mearns
źródło
Co robisz na Macu?
Thomas Fankhauser
Czy nie ma sposobu, aby to zrobić za pomocą wiersza poleceń, na przykład dołączając bibliotekę lub coś takiego?
LuizAngioletti
Czy istnieje sposób, aby automatycznie zaznaczyć pole wyboru „Microsoft Scripting Runtime”? WSZYSTKICH plików Excela? Używam programu Excel 2016
compski
Spójrz na zaakceptowaną odpowiedź na to pytanie. stackoverflow.com/questions/9879825/…
Robert Mearns
13

W programie Excel 2013 ciąg tworzenia obiektu to:

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

zamiast kodu w odpowiedzi powyżej:

Dim fs,fname
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Stefano Spinucci
źródło
by być nieco bardziej dosłownym, zwykle widzę to jakoDim fso As Object
Marcucciboy2
11

Ci goście mają doskonałe przykłady korzystania z obiektu systemu plików http://www.w3schools.com/asp/asp_ref_filesystem.asp

<%
dim fs,fname
set fs=Server.CreateObject("Scripting.FileSystemObject")
set fname=fs.CreateTextFile("c:\test.txt",true)
fname.WriteLine("Hello World!")
fname.Close
set fname=nothing
set fs=nothing
%> 
Gerald Ferreira
źródło
4
Ten fragment kodu demonstruje użycie FSO w ASP / IIS, a nie w programie Excel
Spangen,
2

Po dodaniu referencji musiałem użyć

Dim fso As New Scripting.FileSystemObject
thedanotto
źródło
2

Po zaimportowaniu środowiska wykonawczego skryptów, jak opisano powyżej, musisz dokonać niewielkiej modyfikacji, aby działało w programie Excel 2010 (moja wersja). W poniższym kodzie dodałem również kod używany przez użytkownika do wybrania pliku.

Dim intChoice As Integer
Dim strPath As String

' Select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False

' Show the selection window
intChoice = Application.FileDialog(msoFileDialogOpen).Show

' Get back the user option
If intChoice <> 0 Then
    strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Else
    Exit Sub
End If

Dim FSO As New Scripting.FileSystemObject
Dim fsoStream As Scripting.TextStream
Dim strLine As String

Set fsoStream = FSO.OpenTextFile(strPath)

Do Until fsoStream.AtEndOfStream = True
    strLine = fsoStream.ReadLine
    ' ... do your work ...
Loop

fsoStream.Close
Set FSO = Nothing

Mam nadzieję, że to pomoże!

Z poważaniem

Fabio

FIRE FOX
źródło