使用 VBA 将特定文本文件导入 Excel 电子表格

Import a specific Text File into Excel Spreadsheet using VBA

我有一个每天创建的文本文件,每天都放在同一个文件夹中。文本文件的文件路径永远不会改变。现在,假设路径是:“\MyPath\test.csv\”

我想在 MS Excel 2010 中创建一个报告,用户可以在其中按下一个按钮,将文本文件导入一个范围,例如 Worksheets("Sheet1").Range("A1"),然后对导入的数据进行分析。

我使用 VBA 和 MS Excel 有一段时间了,并且了解如何创建一个脚本来从各种数据库等导入数据,但我似乎无法理解转头导入文本文件!我在网上找到的所有示例似乎都会为用户打开一个对话框 select 文本文件,但我不希望我的用户能够执行此操作。我希望每次都导入一个特定的文本文件,而无需用户输入。他们所要做的就是按下一个按钮来启动宏。

有人有一个非常简单的代码可以帮我导入吗?基本上,我想要一个宏将选定的文本文件导入到 Sheet1 单元格 A1 中。我还想在代码中手动指定文本分隔符。

任何help/advice将不胜感激。

一些假设可以让您灵活地自定义此代码示例。我的测试数据文件如下图所示,即十个可变长度记录,每个字段以逗号分隔。代码一次读取 .csv 文件一条记录,并将每条记录放在单独的行中。在每一行中(即对于每条记录),每个字段都放在一个单独的单元格中。它使用几个数组来实现这一点。您可以调整代码以适合您的上下文,并且其中有一些注释可以提供帮助。只需添加一个按钮即可调用此宏。

Sub ReadTxtFile()

Dim ws As Worksheet
Dim rearr(), wrarr()
Dim fName As String
Dim rowno As Long, colno As Long, rec As Long
Dim cnt As Long, cnt2 As Long
Dim delim As String

'specify output sheet
Set ws = Worksheets("Sheet1")
'specify text file to read (.csv in this example)
fName = "C:\MyPath\test.csv"
'set text file delimiter
delim = ","  'for Tab delimiter use delim = Chr(9)
ifnum = FreeFile
'set start row/col for text data to be placed ("A1" in this example)
rowno = 1  'row 1
colno = 1  'col A

    With ws
        Open fName For Input Access Read As #ifnum
            rec = 0
                Do While Not EOF(ifnum)
                    Line Input #ifnum, tmpvar
                    rec = rec + 1
                    'Put whole record into array
                    ReDim Preserve rearr(1 To rec)
                    rearr(rec) = tmpvar
                    'Split fields into a second array
                    wrarr = Split(rearr(rec), delim)
                    cnt2 = UBound(wrarr)
                        'Write fields out to specified ws range, one row per record
                        For cnt = 0 To cnt2
                            ws.Cells(rowno, colno + cnt) = wrarr(cnt)
                        Next cnt
                     rowno = rowno + 1
                Loop
            Close #ifnum
    End With
End Sub