2016-05-31 1 views
2

Bonjour,VBA_using « entrée de ligne », mais a échoué (erreur 62: entrée passé la fin du fichier)

J'ai essayé d'écrire un code pour: 1. Ouvrez un txt. fichier, qui contient une liste de fichiers 2. Ouvrez les fichiers dans la liste un par un 3.read le contenu de chaque fichier et le mettre dans la feuille

Et mon code est ici:

Private Sub Boutton_Importer_Click() 

list_de_controle = "TEXT;" & listPath 
Open listPath For Input As #1 'open the list 

Do While Not EOF(1) 'read the list 
    Line Input #1, nom_de_Fich 
    ActiveCell = nom_de_Fich 
    ActiveCell.Offset(0, 1).Select 

    Open nom_de_Fich For Input As #2 'open a file in the list 

    Do While Not EOF(1) 'read the contents in the list 
     Line Input #2, contenu 
     ActiveCell = contenu 
     ActiveCell.Offset(0, 1).Select 
    Loop 
    Close #2 

    ActiveCell.Offset(1, 0).Select 'go to the line below 
    ActiveCell.End(xlToLeft).Select 
Loop 
Close #1 
End Sub 

Vous pouvez trouver que la partie de Do While est exactement la même mais la première, pour la liste, fonctionne bien. Et le second, pour le contenu du fichier, a toujours échoué. Pourriez-vous s'il vous plaît m'aider à vérifier cela? Merci d'avance!

+0

J'ai oublié quelque chose, que le premier fichier dans la liste peut être ouverte, et tout le contenu peut être lu à la feuille, mais le fichier suivant peut ne sois pas ouvert. Donc, je pense que le problème est que EOF ne peut pas comprendre si c'est déjà arrivé à la fin. – Hiddenllyy

Répondre

2

Le problème est ici:

Do While Not EOF(1) 'read the contents in the list 
    Line Input #2, contenu 
    ActiveCell = contenu 
    ActiveCell.Offset(0, 1).Select 
Loop 
Close #2 

Vous racontons le code à boucle à travers et Line Input du fichier #2 mais la condition est basée sur d'atteindre la fin du fichier dans le fichier #1.

Comme vous vous déplacez pas réellement dans le fichier #1 la déclaration EOF(1) sera jamais être vrai - cette boucle se déroulera et inévitablement frappé la fin du fichier #2 à quel point vous obtiendrez l'erreur

entrée fin du fichier passé


Pour résoudre votre problème:

essayer quelque chose comme ceci:

Sub Foo() 

Dim textFile1 As Byte 
Dim textFile2 As Byte 
Dim tfArray1 As Variant 
Dim tfArray2 As Variant 

textFile1 = FreeFile 

Open listPath For Input As #textFile1 
    tfArray1 = Split(Input(LOF(textFile1), textFile1), vbCrLf) 
Close #textFile1 

For Each tfile In tfArray1 

    textFile2 = FreeFile 

    Open tfile For Input As #textFile2 
     tfArray2 = Split(Input(LOF(textFile2), textFile2), vbCrLf) 
    Close #textFile2 

    Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(UBound(tfArray2) + 1, 1).Value = _ 
     WorksheetFunction.Transpose(tfArray2) 

Next 

End Sub 
+0

Merci beaucoup! Et j'ai essayé de changer juste l'EOF (1) en EOF (2), et cela fonctionne. Mais je ne sais pas si cela va causer des problèmes ou pas? – Hiddenllyy

+0

Ne devrait pas faire - mais j'ai mis à jour ma réponse pour inclure une meilleure façon de faire ce que vous essayez de réaliser de toute façon alors essayez-le si vous le souhaitez. Ne pas oublier de marquer comme la réponse si cela a aidé –

+0

je vois! Je vais essayer. Et bien sûr, je vais donner une marque! Merci beaucoup! – Hiddenllyy