2013-11-21 70 views
3

我正在嘗試使用以下宏讀取文本文件(這些文件是由外部程序生成的,無法使用tweeked)。輸入文件過尾VBA excel

While Not EOF(int_current_file) 
    Line Input #int_current_file, buf 
    If Left(buf, 1) <> "#" Then 
     buf1 = Split(buf, "=") 
     Print #int_master_file, CInt(Left(buf, 2)) & ";" & CInt(Mid(buf, 3, 4)) & ";" & CInt(Mid(buf, 7, 3)) & ";" & CInt(Mid(buf, 10, 1)) & ";" & CDbl(buf1(1)/100000000) & ";" & CDate(file_date) & ";" & Mid(file_name, 4, 3) 
    End If 
    'Line Input #int_current_file, buf 
    'Debug.Print Data 
Wend 

然而,在此文件的第二行我有以下字符串:

=01082013=01072013=31072013=06082013=1640=380441=21=000001249=#02IFS86.G84=IFSSS5=7ҐK!Ђi—Љ42ЃЁ4№{¤Хo$]ґ•Хp Ё1‹;±~†ЁRLЌг‰®ґн нќРР^±>_‰

當宏試圖讀取該行的error 62發生Input past end of file

我該如何解決這個問題?

回答

11

我可以讓你更好地閱讀VBA中的文本文件嗎?

這將讀取數組中的整個ONE GO文本文件,然後關閉文件。這樣你就不需要隨時保持文件的打開狀態。

Option Explicit 

Sub Sample() 
    Dim MyData As String, strData() As String 
    Dim i As Long 

    '~~> Replace your file here 
    Open "C:\MyFile.Txt" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 

    ' 
    '~~> Now strData has all the data from the text file 
    ' 

    For i = LBound(strData) To UBound(strData) 
     Debug.Print strData(i) 
     ' 
     '~~> What ever you want here 
     ' 
    Next i 
End Sub 
+0

能否請您寄出對這段和平的代碼註釋:邁德特= $空間(LOF(1)) 獲取#1,MyData的? –

+1

'Space $(LOF(1))'創建一個文件大小的字符串。 [LOF](http://msdn.microsoft.com/en-us/library/dtz29k5z%28v=vs.90%29.aspx)和'Space $'是將字符串初始化爲給定的長度。順便說一下,它是否適合你? –

+0

嗨,我一直在VBA導入一個簡單的文本文件的困難flameasted !.從網站上直接提取數據似乎比從文本文件中導入數據更容易。你的是我嘗試過的第二十條建議,它對我也不適用。我只是想將重要的文本文件作爲字符串來使用,以便對結果字符串使用'Mid'和'InStr'函數。任何澄清都會比歡迎。如果我嘗試把strData放在TextBox中,我得到一個錯誤:「類型不匹配」我猜這是由於數組而不是字符串類型?任何解決方案 – SJDS