我的宏使文件变大,尽管它删除了信息

Posted

技术标签:

【中文标题】我的宏使文件变大,尽管它删除了信息【英文标题】:My macro makes the file size larger although it deletes information 【发布时间】:2019-01-09 13:42:21 【问题描述】:

我正在使用宏为公司的不同利益相关者创建单独的报告。问题是宏保存的文件比父文件大。 请注意:

没有“空行”占用空间。 结果文件中没有与外部源的连接。 任何文件(原始文件或结果文件)中都没有宏。 我确实在几年前看到了一个非常相似的帖子,但这没有令人满意的答案。尽管有人暗示了用于保存的命令,但这是我使用的命令: ActiveWorkbook.SaveAs Filename:="C:\path\" & WR_Date & "Monthly-Report" & Partner & ".xlsx"

(Excel Macros file size)

以下是宏完成的步骤的回顾。

    宏打开“主工作簿” 删除所有外部连接 (OLAP) 删除表格中的计算(复制为简单值) 删除对帐表格 保存 4 个文件(部门主文件、国家主文件、地区主文件、合作伙伴主文件)。 使用这些主文件删除利益相关者的所有不相关数据。 更新所有枢轴缓存(将所有枢轴设置为无论如何都不保留内存。 保护所有工作表和工作簿。 用正确的名称保存文件。

根据下面 cmets 中的讨论,我将我的宏粘贴在下面。全部替换功能用于删除任何类型的敏感信息,有时结果可能会很奇怪,但绝对足以发现问题。

我很确定是宏导致了这种情况:如果我复制宏完成的步骤,文件的大小会小得多(5-15 Mo vs 50-60 Mo)。

此外,区域报告是正常大小的。国家和部门文件比他们的主文件大,伙伴文件也太大。

编辑: 经过大量检查,我找到了答案的开头,它似乎与数据透视表的刷新方式有关。我的代码是这样的:

ActiveWorkbook.RefreshAll
For Each pc In ActiveWorkbook.PivotCaches
    pc.Refresh
Next pc

我现在在刷新数据透视缓存之前删除了“全部刷新”,并为每个分区和国家/地区文件节省了大约 20 个月。这仍然不能完全令人满意,因为部门和国家/地区文件的大小仍与其父级文件大致相同或更大,但这些报告需要今天发布。

我会继续寻找,但肯定会在下个月之前向您发布完整的解决方案!

【问题讨论】:

如果您想节省空间,请尝试将文件另存为.xlsb 这种格式是否支持所有数据透视表和切片器?第 5 步创建的“执行母版”大小约为 30 Mo,宏从该母版创建的文件为 55 Mo... 是的,确实如此。 :) 谢谢,会试试这个:) 遗憾的是连 1kb 都没有保存 :( 【参考方案1】:

进行了快速测试,可能与文件中的数据损坏有关。

“TestSize1”文件只包含数据值 “TestSize2”文件只包含excel函数 “TestSize3”文件只包含格式

Windows File Explorer - Test

我只看到“仅值”或“TestSize1”工作簿上的文件大小略有增加。我相信您不应该看到大小增加,除非工作簿中的数据因您的情况而损坏。此文件类型仅允许额外保存功能,例如宏/VBA 代码。

"The first is the default XLSX, then there's XLSM which is identical to XLSX except it can contain macros..."

我会考虑将数据值复制到新工作簿中并将其保存为.xlsb。它应该减小大小(显然),但它也删除了可能被误读或损坏的 excel 功能。之后,在重新启动的 excel 窗口中打开.xlsb(可能之前也重新启动计算机以清除缓存)并尝试保存回您喜欢的任何格式。添加功能和格式以恢复文档。

这对我来说断断续续地工作,用于恢复大型 .csv 文件。我希望它对你有用。

【讨论】:

文件中没有损坏的数据,我做了很多检查。

以上是关于我的宏使文件变大,尽管它删除了信息的主要内容,如果未能解决你的问题,请参考以下文章

从大型数据集中提取最小/最大/平均数据的宏

Python 构建忽略 yaml 文件,尽管它在 Manifest.in 中指定

keil里面data怎么会变大?

excel内存突然变大是啥原因?

尽管安装了 debuginfo,但 GDB 不显示行号信息

使用字符串从文件中读取专辑信息时调用 Abort