我有一个 .csv 文件和一个主 excel 文件。主文件包含一个表,我想自动将 .csv 文件中的数据附加到现有表中。数据具有相同的标题和列顺序。我有以下 VBA,它可以将 .csv 数据附加到表后的下一行,但数据不是表的一部分:
Sub Append_CSV_File()
Dim csvFileName As Variant
Dim destCell As Range
Set destCell = Worksheets("Sheet1").Cells(Rows.Count,
"E").End(xlUp).Offset(1) 'Sheet1
csvFileName = Application.GetOpenFilename(FileFilter:="CSV Files
(*.csv),*.csv", Title:="Select a CSV File", MultiSelect:=False)
If csvFileName = False Then Exit Sub
With destCell.Parent.QueryTables.Add(Connection:="TEXT;" & csvFileName,
Destination:=destCell)
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.Refresh BackgroundQuery:=False
End With
destCell.Parent.QueryTables(1).Delete
End Sub
数据右侧的表格中还有几列,它们会根据导入的数据计算出一个值。有没有办法在添加新数据时自动将公式复制到列中?
答案1
我遇到了同样的问题,想在一个列表中附加几个(准确地说是 16 个)csv 文件。我使用的数组是静态的,有更好的编码方法,但我需要从文件夹位置内的多个 csv 文件中收集特定文件。
我发现您的代码很有趣,并更新了我从其他来源整理的代码,以使一组代码可以运行。
感谢您分享您的代码,正如您将看到的,我已经使用了您的代码元素来查找要附加的下一个空白行。
参见下面的代码示例,您需要添加文件名和文件目录路径,并更新 xFiles 数组以匹配您要导入和附加的文件数量:
Sub LoadDelimitedFiles()
Dim xStrPath As String
Dim xFile As String
Dim xCount As Long
Dim xFiles(15) As String
Dim destCell As Range
On Error GoTo ErrHandler
'added an update to the code to select the individual file names needed from server within a folder
'PathName of Folder Location
xStrPath = "<Insert Folder Location>"
'Name the Array with the CSV files name for file Content
xFiles(0) = "<Filename1>"
xFiles(1) = "<Filename2>"
xFiles(2) = "<Filename3>"
xFiles(3) = "<Filename4>"
xFiles(4) = "<Filename5>"
xFiles(5) = "<Filename6>"
xFiles(6) = "<Filename7>"
xFiles(7) = "<Filename8>"
xFiles(8) = "<Filename9>"
xFiles(9) = "<Filename10>"
xFiles(10) = "<Filename11>"
xFiles(11) = "<Filename12>"
xFiles(12) = "<Filename13>"
xFiles(13) = "<Filename14>"
xFiles(14) = "<Filename15>"
xFiles(15) = "<Filename16>"
xCount = 0
If xStrPath = "" Then Exit Sub
Application.ScreenUpdating = False
'Clear Existing Sheet Data
Columns("A:I").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
'Set the 1st Filename
xFile = Dir(xStrPath & xFiles(xCount) & ".csv")
'destCell contains the location of the next cell to append the next csv file data to
Set destCell = Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1)
Do While xCount <> 16
xFile = Dir(xStrPath & xFiles(xCount) & ".csv")
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" _
& xStrPath & xFile, Destination:=destCell)
.Name = "a" & xCount
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
Set destCell = Worksheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1)
xCount = xCount + 1
End With
Loop
'Remove the Blank Top row
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1").Select
'Update the screen to show the contents appended csv file data
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox "no files found", , "Error Message"
End Sub