答案1
这比您想象的要简单,因为您可以从宏中调用文本导入向导(或者更确切地说,您可以使用其功能),而无需编写 CSV 解析器或类似的任何花哨的东西。
事实上,我对下面的宏所做的一切就是使用内置的记录功能,然后稍微调整一下以满足您的需要。
使用宏:
备份当前的 Excel 文件,以防出现问题。
将宏中的定义更改
folder
为包含所有数据文件的路径 - 确保包含尾随斜杠。选择列的标题单元格,必须包含某个文件的名称 -包括文件扩展名。如果您希望删除扩展,您可以在数据加载后编辑此字段。
运行宏。
操作
它将从当前单元格中获取文件名,在指定单元格中查找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