web-dev-qa-db-fra.com

Comment utiliser FileSystemObject dans VBA?

Y a-t-il quelque chose que je dois faire référence? Comment puis-je utiliser ceci:

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

Je reçois une erreur car il ne reconnaît pas ces objets.

Dans Excel, vous devez définir une référence à la bibliothèque d'exécution de scripts VB. Le fichier correspondant se trouve généralement à l'adresse \Windows\System32\scrrun.dll

  • Pour référencer ce fichier, chargez Visual Basic Editor (ALT+F11)
  • Sélectionnez Outils> Références dans le menu déroulant.
  • Une liste des références disponibles sera affichée
  • Cochez la case en regard de 'Microsoft Scripting Runtime'
  • Le nom complet et le chemin du fichier scrrun.dll seront affichés sous la liste.
  • Clique sur le OK bouton.

Cela peut également être fait directement dans le code si l'accès au modèle d'objet VBA a été activé.

L'accès peut être activé en cochant la case Trust access to the VBA project object model trouvée dans Fichier> Options> Centre de gestion de la confidentialité> Paramètres du centre de gestion> Paramètres de macro .

VBA Macro settings

Pour ajouter une référence:

Sub Add_Reference()

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

End Sub

Pour supprimer une référence:

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
170
Robert Mearns

Ces gars-là ont d'excellents exemples d'utilisation de l'objet système de fichiers 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
%> 
12
Gerald Ferreira

Dans Excel 2013, la chaîne de création d'objet est la suivante:

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

au lieu du code dans la réponse ci-dessus:

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

Après avoir importé le script d'exécution comme décrit ci-dessus, vous devez apporter quelques légères modifications pour le faire fonctionner dans Excel 2010 (ma version). Dans le code suivant, j'ai également ajouté le code utilisé par l'utilisateur pour sélectionner un fichier.

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

J'espère que ça aide!

Meilleures salutations

Fabio

2
FIRE FOX

Après avoir ajouté la référence, je devais utiliser

Dim fso As New Scripting.FileSystemObject
1
thedanotto