Como faço para usar FileSystemObject no VBA?

112

Existe algo que eu preciso fazer referência? Como faço para usar isso:

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

Estou recebendo um erro porque ele não reconhece esses objetos.

eu--''''''---------''''''''''''
fonte

Respostas:

178

No Excel, você precisa definir uma referência para a biblioteca de tempo de execução de script VB. O arquivo relevante geralmente está localizado em\Windows\System32\scrrun.dll

  • Para fazer referência a este arquivo, carregue o Editor do Visual Basic ( ALT+ F11)
  • Selecione Ferramentas> Referências no menu suspenso
  • Uma caixa de listagem de referências disponíveis será exibida
  • Marque a caixa de seleção ao lado de ' Microsoft Scripting Runtime'
  • O nome completo e o caminho do scrrun.dllarquivo serão exibidos abaixo da caixa de listagem
  • Clique no OKbotão.

Isso também pode ser feito diretamente no código se o acesso ao modelo de objeto VBA tiver sido habilitado.

O acesso pode ser habilitado marcando a caixa de seleção Trust access to the VBA project object modelencontrada em Arquivo> Opções> Central de confiabilidade> Configurações da central de confiança> Configurações de macro

Configurações de macro VBA

Para adicionar uma referência:

Sub Add_Reference()

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

End Sub

Para remover uma referência:

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
fonte
O que você faz em um Mac?
Thomas Fankhauser
Não existe uma maneira de fazer isso via linha de comando, como incluir uma biblioteca ou algo assim?
LuizAngioletti 06/08/2015
Existe uma maneira de marcar AUTOMATICAMENTE a caixa de seleção 'Microsoft Scripting Runtime'? para TODOS os arquivos do Excel? Estou usando o Excel 2016
compski de
Dê uma olhada na resposta aceita para esta pergunta. stackoverflow.com/questions/9879825/…
Robert Mearns,
13

No excel 2013, a string de criação de objeto é:

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

em vez do código na resposta acima:

Dim fs,fname
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Stefano Spinucci
fonte
para ser um pouco mais explícito, normalmente vejo comoDim fso As Object
Marcucciboy2
11

Esses caras têm excelentes exemplos de como usar o objeto de sistema de arquivos 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
fonte
4
Este trecho de código demonstra o uso do FSO em ASP / IIS não excel
Spangen
2

Depois de adicionar a referência, tive que usar

Dim fso As New Scripting.FileSystemObject
thedanotto
fonte
2

Depois de importar o tempo de execução de script conforme descrito acima, você precisa fazer algumas pequenas modificações para fazê-lo funcionar no Excel 2010 (minha versão). No código a seguir, também adicionei o código usado para o usuário escolher um arquivo.

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

Espero que ajude!

Cumprimentos

Fabio

RAPOSA DE FOGO
fonte