提问人:strawbreshi 提问时间:9/29/2023 更新时间:9/29/2023 访问量:36
通过打开查询连接 VBA 减小文件大小
Reducing File Size via Opening a Query Connection VBA
问:
目前,我有一个工作簿,里面装满了几个数据透视表,这些数据透视表通过巨大的数据库加载,仅作为连接放入数据模型中。虽然这种方法不像整个表那样占用内存,但我似乎无法将文件大小降至 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
答:
0赞
Tim Williams
9/29/2023
#1
您说您有 >200 列,但您的代码有:
...[Delimiter="","", Columns=3, Encoding=65001, ...
如果不需要指定要导入的列数,则可以删除该部分:
...[Delimiter="","", Encoding=65001, ...
评论