2017-08-05 212 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