提问人:martin_hansson 提问时间:7/18/2023 更新时间:7/18/2023 访问量:270
使用VBA将查询数据加载到工作表中
Load query data into worksheet with VBA
问:
我正在尝试自动化我的同事们正在做的流程。该过程今天是手动的,他们有一个旧的 VBA 宏,该宏错误地格式化了文件,当我修复此问题时,我认为我可以自动执行他们所做的其他一些步骤。今天的步骤是:
- 打开一个新的 excel 文件
- 转到数据 -> 从文件中获取数据 -> 从文本/CSV
- 选择文件
- 选择 1252:西欧 (Windows),分隔符分号
- 负荷
- 运行宏
- 另存为使用 utf-8 编码的 csv
我已经设法修复了每个步骤,但是在导入csv数据时遇到问题。我已设法将连接添加到正确的文件,但工作表中没有显示任何数据,即使数据在Power Query编辑器中正确显示也是如此。我尝试搜索如何“加载”数据,但我无法弄清楚。
我当前用于创建连接的代码:
Sub formatCSV()
'Import data from csv
Dim workbook As workbook
Dim filePath As String
Dim importFormula As String
'Set file path
filePath = ""
Set workbook = ActiveWorkbook
importFormula = _
"let " & _
"Source = Csv.Document(File.Contents(""" & filePath & """), [Delimiter = "";"", Columns=30, Encoding=1252, QuoteStyle=QuoteStyle.Csv]), " & _
"#""Promoted Headers"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]) " & _
"in " & _
"Source"
workbook.Queries.Add Name:="Query1", Formula:=importFormula
End Sub
感谢所有的帮助!
答:
1赞
Szymon Pecuch
7/18/2023
#1
您可以尝试 Sub 它需要两个参数:查询名称和目标工作表作为对象。它在 A1 单元格上加载数据。
您可以在 sub 的 aed 中添加到您的代码中进行尝试:
LoadQuery "Query1", ActiveSheet
子代码:
Private Sub LoadQuery(ByVal QueryName As String, ByVal LoadDataSheet As Worksheet)
With LoadDataSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & QueryName & ";Extended Properties=""""", _
Destination:=LoadDataSheet.Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [" & QueryName & "]")
.RowNumbers = False
.FillAdjacentFormulas = False
'.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = False
.AdjustColumnWidth = True
.RefreshPeriod = 0
'.PreserveColumnInfo = True
.ListObject.DisplayName = "Table_" & QueryName
.Refresh BackgroundQuery:=False
End With
''Additionally you can unlink data from Power Query and unlist - transform ListObject to data in cells
'With LoadDataSheet.ListObjects.Item("Table" & QueryName)
' .Unlink
' .Unlist
'End With
End Sub
评论
filePath