csv 用VBA将查询数据加载到工作表中

h9a6wy2h  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(86)

我正在尝试将我的同事正在做的一个过程自动化。这个过程是手动的今天,他们有一个旧的VBA宏,格式的文件不正确,而我正在修复这个,我想我可以自动化一些其他步骤,他们这样做。今天的步骤是:
1.打开新的excel文件
1.转到数据->从文件获取数据->从文本/CSV
1.选择文件
1.选择1252:西欧(Windows),分隔符分号
1.负载
1.运行宏
1.保存为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

字符串
感谢所有帮助!

trnvg8h3

trnvg8h31#

你可以试试Sub,它有两个参数:查询名称和目标工作表作为对象。它在A1单元加载数据。
你可以添加到你的代码在aed of sub尝试它:

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

相关问题