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

Reducing File Size via Opening a Query Connection VBA

提问人:strawbreshi 提问时间:9/29/2023 更新时间:9/29/2023 访问量:36

问:

目前,我有一个工作簿,里面装满了几个数据透视表,这些数据透视表通过巨大的数据库加载,仅作为连接放入数据模型中。虽然这种方法不像整个表那样占用内存,但我似乎无法将文件大小降至 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 连接 数据透视表

评论


答:

0赞 Tim Williams 9/29/2023 #1

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

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

如果不需要指定要导入的列数,则可以删除该部分:

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