Як я можу використовувати FileSystemObject у VBA?


112

Чи є щось, на що мені потрібно звернутися? Як це використовувати:

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

Я отримую помилку, оскільки він не розпізнає ці об'єкти.

Відповіді:


178

У програмі Excel потрібно встановити посилання на бібліотеку виконання сценарію VB. Зазвичай відповідний файл знаходиться за адресою\Windows\System32\scrrun.dll

  • Для посилання на цей файл завантажте Visual Basic Editor ( ALT+ F11)
  • У спадному меню виберіть Інструменти> Список літератури
  • Відобразиться список доступних посилань
  • Поставте прапорець біля пункту " Microsoft Scripting Runtime"
  • Повне ім'я та шлях до scrrun.dllфайлу відображатиметься під списком списку
  • Натисніть на OKкнопку.

Це також можна зробити безпосередньо в коді, якщо доступ до об'єктної моделі VBA увімкнено.

Доступ можна активувати, встановивши прапорець Trust access to the VBA project object modelу розділі Файл> Параметри> Центр довіри> Налаштування Центру довіри> Налаштування макросу

Налаштування макросів VBA

Щоб додати посилання:

Sub Add_Reference()

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

End Sub

Щоб видалити посилання:

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

Що ви робите на Mac?
Томас Фанкхаузер

Чи немає способу зробити це за допомогою командного рядка, як, зокрема, включити бібліотеку чи щось таке?
LuizAngioletti

Чи є спосіб AUTO встановити прапорець "Microsoft Scripting Runtime"? для ВСІХ файлів Excel? Я використовую Excel 2016
compski

Погляньте на прийняту відповідь на це питання. stackoverflow.com/questions/9879825/…
Роберт Мірнс

13

У програмі Excel 2013 рядок створення об'єкта:

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

замість коду у відповіді вище:

Dim fs,fname
Set fs=Server.CreateObject("Scripting.FileSystemObject")

щоб бути дещо чіткішим, я зазвичай вважаю цеDim fso As Object
Marcucciboy2

11

У цих хлопців є прекрасні приклади використання об’єкта файлової системи 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
%> 

4
Цей фрагмент коду демонструє використання FSO в ASP / IIS, але не більше
Spangen

2

Після додавання посилання мені довелося скористатися

Dim fso As New Scripting.FileSystemObject

2

Після імпорту сценарію виконання, як описано вище, ви повинні внести невеликі зміни, щоб він працював у Excel 2010 (моя версія). До наступного коду я також додаю код, який використовується користувачу для вибору файлу.

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

Сподіваюся, це допоможе!

З найкращими побажаннями

Фабіо

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.