J'essaie de lire un fichier texte en utilisant vba. J'ai essayé le code ci-dessous
Open "C:\tester.txt" For Input As #1
Worksheets("UI").Range("H12").Value = Input$(LOF(1), 1)
Close #1
Quand je lance ceci, je reçois une erreur.
Erreur d'exécution '62'. Entrer après la fin du fichier.
Le contenu du fichier texte est:
Impossible d'ouvrir COM10. Assurez-vous qu'il est connecté
Plus d'autres choses
Et plus de choses
beaucoup plus de choses
Merci d'avance pour votre aide.
Le code suivant parcourt chaque ligne du document texte et les affiche à partir de la plage H12
et vers le bas dans la feuille d'interface utilisateur.
Sub ImportFromText()
Open "C:\tester.txt" For Input As #1
r = 0
Do Until EOF(1)
Line Input #1, Data
Worksheets("UI").Range("H12").Offset(r, 0) = Data
r = r + 1
Loop
Close #1
End Sub
Plutôt que de boucler cellule par cellule, vous pouvez lire le fichier entier dans un tableau variant, puis le vider en un seul. coup
Changez le chemin de C:\temp\test.txt
en conséquence.
Sub Qantas_Delay()
Dim objFSO As Object
Dim objTF As Object
Dim strIn 'As String
Dim X
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTF = objFSO.OpenTextFile("C:\temp\test.txt", 1)
strIn = objTF.readall
X = Split(strIn, vbNewLine)
[h12].Resize(UBound(X) + 1, 1) = Application.Transpose(X)
objTF.Close
End Sub
Plus Légèrement modifié pour ceux qui n'aiment pas VBA, ils doivent composer des variables explicites et ensuite perdre du temps à leur transférer des données. Let With. fait le travail
Function LoadFileStr$(FN$)
With CreateObject("Scripting.FileSystemObject")
LoadFileStr = .OpenTextFile(FN, 1).readall
End With
End Function
Pour lire ligne par ligne:
Public Sub loadFromFile(fullFilename As String)
Dim FileNum As Integer
Dim DataLine As String
FileNum = FreeFile()
Open fullFilename For Input As #FileNum
While Not EOF(FileNum)
Line Input #FileNum, DataLine
Debug.Print DataLine
Wend
End Sub
Sub LoadFile() ' load entire file to string
' from Siddharth Rout
' http://stackoverflow.com/questions/20128115/
Dim MyData As String
Open "C:\MyFile" For Binary As #1
MyData = Space$(LOF(1)) ' sets buffer to Length Of File
Get #1, , MyData ' fits exactly
Close #1
End Sub
la réponse de brettdj, légèrement ajustée
Public Function readFileContents(ByVal fullFilename As String) As String
Dim objFSO As Object
Dim objTF As Object
Dim strIn As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTF = objFSO.OpenTextFile(fullFilename, 1)
strIn = objTF.readall
objTF.Close
readFileContents = strIn
End Function
Je pense qu'une alternative plus simple est Data
> From Text
et vous pouvez spécifier la fréquence d'actualisation des données dans les propriétés.