通过打开查询连接 VBA 减小文件大小

问题描述 投票:0回答:1

目前,我有一个工作簿,其中填充了多个数据透视表,这些数据透视表通过仅作为连接放入数据模型的大型数据库加载。虽然这种方法比加载整个表占用的内存更少,但我似乎无法使文件大小低于 100MB,更不用说我的 30MB 目标了。

因此,我创建了一个宏来将查询连接加载到数据模型中,并在手动删除副本中的连接后设置完全相同的数据透视表。当我测试 VBA 代码时,查询显示在面板中,但我收到错误“Expression.Error:无效标识符”,尽管所有列名称及其各自的类型都是正确的。此外,在 VBA 中,我收到以下消息:“运行时错误‘1004’我们无法从数据模型获取数据。这是我们收到的错误消息:[Expression.Error] 无法识别名称“Source”。确保拼写正确”。注意:这只是代码的开头。尚未构建数据透视表,这是脚本中的进一步内容。

我制作了一个测试文档,并在宏中记录了完全相同的步骤。这段代码似乎工作正常,我有查询和数据模型连接。此错误是否与查询中的列数有关,因为我的数据超过 200?我计划在打开文件时运行此代码,因此文件大小会随之增大。以下是工作测试代码。

Sub Testing()
'
' Testing Macro
'

'
    ActiveWorkbook.Queries.Add Name:="Test Data", Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "    Source = Csv.Document(File.Contents(""C:\Users\xxx\xxx\Test Data.csv""),[Delimiter="","", Columns=3, Encoding=65001, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Promoted Headers"" = Table.PromoteHeaders(Source, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Changed Type"" = Table.TransformColumnTypes(#""Promoted Headers"",{{""Rank"", Int64.Type}, {" & _
    """Cat"", type text}, {""Sales"", Int64.Type}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Changed Type"""
Workbooks("Test").Connections.Add2 "Query - Test Data", _
    "Connection to the 'Test Data' query in the workbook.", _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Test Data;Extended Properties=" _
    , """Test Data""", 6, True,     False
End Sub
excel vba connection pivot-table
1个回答
0
投票

您说您有 >200 列,但您的代码有:

...[Delimiter="","", Columns=3, Encoding=65001, ...

© www.soinside.com 2019 - 2024. All rights reserved.