使用宏将 CSV 文件导入 Excel

使用宏将 CSV 文件导入 Excel

我想开发一个宏,在 Excel 工作表中,我在特定单元格中输入日期,然后该宏将进入包含文本文件的文件夹。可以说是一个数据库。我希望它找到以日期形式书写的相应文件名,将数据放在分隔符中,然后粘贴到我最初放置日期的单元格正下方。

该文件夹将始终位于同一位置,并且文本文件将全部采用 DD_MM_YYYY 格式。并且下面的单元格将始终为空

一些图片可以帮助我更容易地理解我的问题。

结果 数据输入步骤 1 数据输入步骤 2 数据输入步骤 3

答案1

这比您想象的要简单,因为您可以从宏中调用文本导入向导(或者更确切地说,您可以使用其功能),而无需编写 CSV 解析器或类似的任何花哨的东西。

事实上,我对下面的宏所做的一切就是使用内置的记录功能,然后稍微调整一下以满足您的需要。

使用宏:

  1. 备份当前的 Excel 文件,以防出现问题。

  2. 将宏中的定义更改folder为包含所有数据文件的路径 - 确保包含尾随斜杠。

  3. 选择列的标题单元格,必须包含某个文件的名称 -包括文件扩展名。如果您希望删除扩展,您可以在数据加载后编辑此字段。

  4. 运行宏。

操作

它将从当前单元格中获取文件名,在指定单元格中查找folder并打开该文件。然后它将以 CSV 格式导入,正好一个单元格以下选定的单元格(启动宏时)。

因此,运行宏时它可能会覆盖所选单元格下方的单元格 - 建议小心谨慎。

如果找不到该文件,或者发生其他错误,则此操作将失败,并出现正常的 VBA 错误框,没有友好的错误消息。

宏代码

其中的一些可能可以被修剪 - 正如我所说,我是从录音中获得的,而不是学习如何QueryTables自己使用 - 但它不会造成伤害,并且似乎可靠地工作。

Sub LoadFromFile()
    Dim fileName As String, folder As String
    
    folder = "C:\Path\To\Your\Files\"
    fileName = ActiveCell.Value
    
    ActiveCell.Offset(1, 0).Range("A1").Select

    With ActiveSheet.QueryTables _
        .Add(Connection:="TEXT;" & folder & fileName, Destination:=ActiveCell)
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

相关内容