Как использовать FileSystemObject в VBA?


113

Есть ли что-то, на что мне нужно сослаться? Как мне это использовать:

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

Я получаю сообщение об ошибке, потому что он не распознает эти объекты.

Ответы:


178

В Excel вам нужно установить ссылку на библиотеку времени выполнения сценария VB. Соответствующий файл обычно находится по адресу\Windows\System32\scrrun.dll

  • Чтобы ссылаться на этот файл, загрузите редактор Visual Basic ( 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?
Thomas Fankhauser

Разве нет способа сделать это через командную строку, например, включить библиотеку или что-то в этом роде?
LuizAngioletti

Есть ли способ установить АВТОМАТИЧЕСКУЮ отметку в поле «Microsoft Scripting Runtime»? для ВСЕХ файлов Excel? Я использую Excel 2016
compski

Взгляните на принятый ответ на этот вопрос. stackoverflow.com/questions/9879825/…
Роберт Мирнс

14

В excel 2013 строка создания объекта:

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

вместо кода в ответе выше:

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

чтобы быть немного более определенным, я обычно вижу это какDim fso As Object
Marcucciboy2

12

У этих ребят есть отличные примеры использования объекта файловой системы 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

Надеюсь, это поможет!

С уважением

Fabio

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.