我一直在研究如何使用 PowerShell 和 COM 对象删除 Excel 宏,并取得了成功,但是,我注意到对于 .XLS 文件,即使 VBA 模块本身已经消失,也有一个对我删除的宏名称的引用。如果我将 .XLS 文件另存为 .XLSX,它也会删除该宏,但当我将其保存回 .XLS 时,我仍然会找到一个引用(位于未存档的 VBA_VBA_PROJECT 文件中)。
有人知道如何删除引用吗?我没有发现与指向此引用的各种工作簿相关对象有太多交互。
例如,如果我从 .xlsb 文件中删除 VBA 模块,则不会保留任何引用。
短暂性脑缺血。
答案1
.XLS 依然存在。当然,这很令人遗憾,但这是现实。只是因为一小部分人仍然每天使用它,而且许多导出到 Excel 的软件包都会导出 .XLS 文件,而不是 .XLSX 文件。
以下内容可能有帮助,也可能没帮助,但看起来很有趣,尤其是从第 88 页开始(虽然我只是浏览了一下,所以它可能没有看起来那么有用):
https://interoperability.blob.core.windows.net/files/MS-OVBA/%5bMS-OVBA%5d.pdf
这是 Microsoft 网站上的 Microsoft 文档,因此其链接似乎不会很快中断。不过话虽如此...
我在这个有帮助的网站上找到了链接(值得赞扬):
https://software-solutions-online.com/vba-project-bin-and-protection/?nowprocket=1
我认为,它实际上更多地与 .XLSX 有关,尽管上述文档被认为是微软为开放规范方法之前的版本提供文档的努力。
通常,我建议将文件包作为 .ZIP 包打开并仔细检查其中是否有提及,然后尝试如何直接安全地删除信息,以便能够继续前进,直到找到更好的解决方案。但我不知道任何旧版本(是的,有很多 .XLS 版本,不只是一两个)是否有可打开/可编辑的包。我当时没有这样做,现在也没有理由这样做,因为我有时会对 .XLSX 包这样做。所以我没有这方面的经验。
最后,本着以某种有用的方式前进的精神,无论它是否令人反感,对问题本身没有帮助,当然可以打开一个新的 .XLS 文件并复制所有页面,假设一个人了解/访问它们。应该清除任何 VBA 材料或参考资料。当然,如果它不清除,它将具有诊断性,例如,这将指示引用在工作表信息中传播,并可以指出在哪里删除它(工作表属性)。