【问题标题】:Import a specific Text File into Excel Spreadsheet using VBA使用 VBA 将特定文本文件导入 Excel 电子表格
【发布时间】:2015-03-28 15:12:48
【问题描述】:

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

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

我已经将 VBA 与 MS Excel 一起使用了一段时间,并且了解如何创建一个脚本,该脚本将从各种数据库等导入数据,但我似乎无法理解导入文本文件!我在网上找到的所有示例似乎都打开了一个对话框供用户选择文本文件,但我不希望我的用户能够这样做。我希望每次都导入一个特定的文本文件,而不需要用户输入。他们所要做的就是按下一个按钮来启动宏。

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

任何帮助/建议将不胜感激。

【问题讨论】:

  • 如果您在通过“数据”功能区选项卡上的“从文本”导入文件时录制宏,最终生成的代码会指定路径、分隔符和目标范围,供您根据需要进行调整。

标签: excel vba text import


【解决方案1】:

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

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

【讨论】:

  • 感谢 :) 我的文件实际上是一个带有制表符分隔符的 .txt。你知道我将如何在代码中指定它,因为我不相信“标签”是一个字符串......?再次感谢
  • 替换此行中的变量'delim'如下:'delim = Chr(9)'
猜你喜欢
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多