J'essaie d'analyser un document texte à l'aide de VBA et de renvoyer le chemin indiqué dans le fichier texte.
Par exemple, le fichier texte ressemblerait à ceci:
*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls
Je veux que le VBA charge une ligne à la fois, et s'il commence par un *
, puis passe à la ligne suivante (similaire à la ligne commentée). Pour les lignes avec un chemin de fichier, je veux écrire ce chemin dans une cellule, disons A2
pour le premier chemin, B2
pour le suivant, etc.
Les principales choses que j'espérais avoir une réponse étaient:
1. Quel est le moyen le plus simple et le plus simple de lire un fichier texte à l’aide de VBA?
2. Comment puis-je faire cela ligne par ligne?
pour la lecture la plus élémentaire d’un fichier texte, utilisez open
exemple:
Dim FileNum As Integer
Dim DataLine As String
FileNum = FreeFile()
Open "Filename" For Input As #FileNum
While Not EOF(FileNum)
Line Input #FileNum, DataLine ' read in data 1 line at a time
' decide what to do with dataline,
' depending on what processing you need to do for each case
Wend
Je trouve que FileSystemObject avec TxtStream est le moyen le plus simple de lire des fichiers.
Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)
Ensuite, avec cet objet txtStream
, vous disposez de toutes sortes d’outils que intellisense utilise (contrairement à la méthode FreeFile()
) afin d’éviter les approximations. De plus, vous n’avez pas à assigner un FreeFile et espérez qu’il est toujours libre depuis le moment où vous l’avez assigné.
Vous pouvez lire un fichier comme:
Do While Not txtStream.AtEndOfStream
txtStream.ReadLine
Loop
txtStream.Close
REMARQUE: cela nécessite une référence à Microsoft Scripting Runtime.
Pour être complet; travailler avec les données chargées en mémoire;
dim hf As integer: hf = freefile
dim lines() as string, i as long
open "c:\bla\bla.bla" for input as #hf
lines = Split(input$(LOF(hf), #hf), vbnewline)
close #hf
for i = 0 to ubound(lines)
debug.? "Line"; i; "="; lines(i)
next
Vous pouvez utiliser ce code pour lire ligne par ligne dans un fichier texte. Vous pouvez également vérifier si le premier caractère est "*", puis vous pouvez le laisser.
Public Sub Test()
Dim ReadData as String
Open "C:\satheesh\myfile\file.txt" For Input As #1
Do Until EOF(1)
Line Input #1, ReadData 'Adding Line to read the whole line, not only first 128 positions
If Not Left(ReadData, 1) = "*" then
'' you can write the variable ReadData into the database or file
End If
Loop
Close #1
End Sub