VBA Excel循环导入文本文件

时间:2017-08-05 04:40:12

标签: excel-vba compiler-errors vba excel

我有一个非常简单的vba宏,我正试图将文本文件导入excel。文本文件具有给定名称,并且只有一列具有可变行数的数据。

我需要做的是 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我正试图让最终的电子表格看起来像。理想情况下,只需单击“导入”按钮,我就可以使用单个宏一次导入多个文件。如果我能获得初始导入循环的帮助,我将不胜感激!

2 个答案:

答案 0 :(得分:0)

在循环中,您只需重复将刚刚读取的新文件行值分配给单元格E3。如果文件有100行,当它完成时它将覆盖E3中的值99次,只留下它读取的最后一个值,在E3中

制作一些额外的代码,将E3更改为E4,E5等。

提示:

  • 将循环的数字变量 分配给3。
  • 内部循环确保每次递增变量。
  • 构建单元格引用以通过字符串连接将文件值分配给字符串“E”的末尾。这将给你(在循环的每次传递中)一个不同的上升值,如“E3”,“E4”,“E5”......

答案 1 :(得分: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