2017-08-05 207 views
0

我有一個非常簡單的vba宏,我試圖用它來將文本文件導入到excel中。文本文件具有給定的名稱,並且只有具有可變行數的單列數據。VBA Excel Loop導入文本文件

我需要做的是 1)從特定工作表中的特定單元格中讀取文件名稱 2)使excel將文件中的所有數據行導入到單個列中。

這是我到目前爲止有:

Sub Import() 

fname = Range("E3") 
datadir = Application.ActiveWorkbook.Path 
fpath = datadir & "\" & fname 

Open fpath For Input As #1 

Do Until EOF(1) 
    Line Input #1, LineFromFile 
    Range("E3") = LineFromFile 
Loop 

Close #1 
End Sub 

它並打開文本文件,並使用在E3單元格中輸入文件名的進口數據,但只打印從數據文件中的最後一個值。如果我運行與電子表格在後臺打開調試器,我可以看到

和原始數據和所需出來放例子: 文本文件的內容:

5 
4.24E-09 
15 
4.32E-09 
25 
4.41E-09 
35 
4.49E-09 
45 
4.58E-09 
55 
4.67E-09 

an example我想要讓最終的電子表格看起來像。理想情況下,只需單擊「導入」按鈕,我就可以使用單個宏一次導入多個文件。如果我可以得到最初導入循環的幫助,儘管我會很感激!

回答

0

您正在將每個行值分配給同一個單元格。簡單地說,每次讀取一行時增加一個變量(x),並使用Range.Offset([Row],[Column])屬性寫入新行以抵消Range("E3")

範圍( 「E3」)。偏移(X)= LineFromFile

Sub Import() 
    Dim x As Long 

    fname = Range("E3") 
    datadir = Application.ActiveWorkbook.path 
    fpath = datadir & "\" & fname 

    Open fpath For Input As #1 

    Do Until EOF(1) 
     Line Input #1, LineFromFile 
     Range("E3").Offset(x) = LineFromFile 
     x = x + 1 
    Loop 

    Close #1 
End Sub 
+0

謝謝,我嘗試了你的建議,並解決了問題! – Jess

0

在循環中,您只能重複指定剛剛讀取的新文件行值到單元格E3。如果文件有100行,當它完成時它將會覆蓋E3中的值99次,留下的只是它讀取的最後一個值,E3

使一些額外的代碼將E3更改爲E4,E5等。

提示:

  • 分配一個數值變量外循環,到3
  • 循環確保您增量的VA每次可以加一個。
  • 建立單元格引用以分配文件值,通過字符串連接將您的數值變量放到字符串「E」的末尾。這會給你(在循環的每次通過時)一個不同的上升值,如「E3」,「E4」,「E5」... ...
+0

謝謝你的提示,我總是得到邏輯錯誤的,當它涉及到編程循環。 >。< – Jess