¿Cómo uso FileSystemObject en VBA?

112

¿Hay algo a lo que deba hacer referencia? ¿Cómo uso esto?

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

Recibo un error porque no reconoce estos objetos.

l --''''''--------- '' '' '' '' '' '
fuente

Respuestas:

178

Dentro de Excel, debe establecer una referencia a la biblioteca de tiempo de ejecución del script VB. El archivo relevante generalmente se encuentra en\Windows\System32\scrrun.dll

  • Para hacer referencia a este archivo, cargue el Editor de Visual Basic ( ALT+ F11)
  • Seleccione Herramientas> Referencias en el menú desplegable.
  • Se mostrará un cuadro de lista de referencias disponibles
  • Marque la casilla de verificación junto a ' Microsoft Scripting Runtime'
  • El nombre completo y la ruta del scrrun.dllarchivo se mostrarán debajo del cuadro de lista.
  • Haga clic en el OKbotón.

Esto también se puede hacer directamente en el código si se ha habilitado el acceso al modelo de objetos de VBA.

El acceso se puede habilitar marcando la casilla de verificación que se Trust access to the VBA project object modelencuentra en Archivo> Opciones> Centro de confianza> Configuración del Centro de confianza> Configuración de macros

Configuración de macro de VBA

Para agregar una referencia:

Sub Add_Reference()

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

End Sub

Para eliminar una referencia:

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
fuente
¿Qué haces en una Mac?
Thomas Fankhauser
¿No hay alguna manera de hacer esto a través de la línea de comandos, como incluir una biblioteca o algo así?
LuizAngioletti
¿Hay alguna forma de marcar automáticamente la casilla de verificación 'Microsoft Scripting Runtime'? para TODOS los archivos de Excel? Estoy usando Excel 2016
compski
Eche un vistazo a la respuesta aceptada a esta pregunta. stackoverflow.com/questions/9879825/…
Robert Mearns
13

En Excel 2013, la cadena de creación de objetos es:

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

en lugar del código en la respuesta anterior:

Dim fs,fname
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Stefano Spinucci
fuente
para ser un poco más explícito, normalmente lo veo comoDim fso As Object
Marcucciboy2
11

Estos chicos tienen excelentes ejemplos de cómo usar el objeto del sistema de archivos 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
fuente
4
Este fragmento de código demuestra el uso del FSO en ASP / IIS no sobresalir
Spangen
2

Después de agregar la referencia, tuve que usar

Dim fso As New Scripting.FileSystemObject
thedanotto
fuente
2

Después de importar el tiempo de ejecución de secuencias de comandos como se describe anteriormente, debe realizar una pequeña modificación para que funcione en Excel 2010 (mi versión). En el siguiente código también agregué el código utilizado por el usuario para elegir un archivo.

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 te ayude!

Atentamente

Fabio

ZORRO DE FUEGO
fuente