web-dev-qa-db-fra.com

lire tout le fichier texte en utilisant vba

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.

11
Sanket

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
6

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
11
brettdj

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
6
Harry S

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
2
Fidel
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
1
dcromley

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
0
Fidel

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. 

0
Slai