使用VBA将CSV查询数据加载至Excel工作表遇问题求助
解决Power Query查询创建后未加载数据到工作表的问题
你的代码仅完成了创建Power Query查询的步骤,但没有将查询结果加载到工作表中,这就是编辑器显示正常但工作表无数据的原因。同时你的Power Query公式里,in部分错误引用了原始的Source步骤,而非提升表头后的#"Promoted Headers",需要一并修正。
修改后的完整代码
Sub formatCSV() 'Import data from csv Dim wb As Workbook Dim filePath As String Dim importFormula As String Dim ws As Worksheet Dim qry As WorkbookQuery '替换为你的CSV文件实际路径 filePath = "C:\Example\YourData.csv" Set wb = ActiveWorkbook '新建工作表用于加载数据(如需使用现有表,改为Set ws = wb.Sheets("目标表名")) Set ws = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)) ws.Name = "LoadedCSVData" '修正Power Query公式:输出提升表头后的数据集 importFormula = _ "let " & _ "Source = Csv.Document(File.Contents(""" & filePath & """), [Delimiter = "";"", Columns=30, Encoding=1252, QuoteStyle=QuoteStyle.Csv]), " & _ "#""Promoted Headers"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]) " & _ "in " & _ "#""Promoted Headers""" '添加查询到工作簿 Set qry = wb.Queries.Add(Name:="Query1", Formula:=importFormula) '将查询结果加载到指定工作表的A1单元格起始位置 With ws.ListObjects.Add(SourceType:=0, Source:= _ "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Query1;Extended Properties=""" _ , Destination:=ws.Range("$A$1")).QueryTable .CommandType = xlCmdSql .CommandText = Array("SELECT * FROM [Query1]") .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SaveData = True .AdjustColumnWidth = True .Refresh BackgroundQuery:=False End With End Sub
关键修改说明
- 添加工作表加载逻辑:通过
ListObjects.Add创建表格并绑定Power Query查询,确保查询结果直接输出到工作表 - 修正Power Query输出步骤:将
in Source改为in #"Promoted Headers",保证输出的是带表头的整理后数据 - 参数配置:设置了自动调整列宽、保存数据等参数,匹配手动导入的行为
额外提示
- 如果不需要新建工作表,直接指定现有工作表名称即可
- 确保你的Excel版本支持Power Query(Get & Transform功能)
- 测试时确认
filePath路径正确,避免因路径错误导致加载失败
内容的提问来源于stack exchange,提问作者martin_hansson
相关产品推荐
相关产品推荐

