gpt4 book ai didi

excel - 如何使用 VBA 导出工作表按钮和详细信息

转载 作者:行者123 更新时间:2023-12-04 21:34:49 25 4
gpt4 key购买 nike

我一直在处理我正在使用的 Excel 应用程序中导入/导出 VBA 模块和类。与版本控制一起使用似乎真的很有用。我喜欢。我可以轻松地在模块中实现代码更改、导出我的更改、提交和推送我的更改,以及在 Excel 应用程序的另一个实例中“重新加载”(删除所有模块并重新导入)我的更改。

但是,我找不到将其与工作表一起使用的方法。如果我向工作表添加视觉更改(例如,我添加一个按钮或更改工作表的外观),有没有办法将工作表导出为代码,就像模块一样,这样我就可以完全按照从我的变化看?

我已经知道一些对此的伪解决方案,但要么不适合我在版本控制方面的需要,要么会带来太大的提升。首先,我可以编写一个 VBA 脚本来将我的 Excel 应用程序复制到一个 .xlsx 文件中,该文件将容纳我的任何工作表更改,然后如果我愿意,我可以将它们导入到该应用程序的另一个实例中。问题是我无法将它们包含在我的版本控制中。我也知道我可以在事件中写脚本Workbook_Open每次打开 Excel 应用程序时,基本上都会以编程方式在我的工作表上制作我的用户界面。这将解决我提交代码的问题,但是提升太多了。

对这个问题有什么建议或解决方案吗?

编辑:需要明确的是,我知道我也可以将工作表导出为模块。但是,似乎没有任何东西表明工作表在导出时的样子。因此,当我导入“工作表”时,它会作为类模块导入。

最佳答案

“工作表”是 Document -类型VBComponent ,它是一个类模块,继承了宿主应用程序对象模型中的特定对象类型(这里是 Worksheet 类)。所以“代码”部分被导出为类模块; “文档”部分是您的宿主文档——内容是 很多不仅仅是单元格值和公式(字体、单元格格式、条件格式、单元格注释、形状等),并且在 Office 2007+ 中,它们以 XML 格式序列化,并打包在 .zip 中(然后重命名带有 .xlsx 扩展名):为了对文档进行适当的源代码控制,您需要实际 XML 上的差异。

此外,您不能导入文档类型 VBComponent回到 VBProject ,因为它是拥有文档类型组件的宿主应用程序。例如将工作表添加到 ThisWorkbook ,需要使用Excel对象模型,调用ThisWorkbook.Worksheets.Add ;同上删除它们。

这就是为什么没有针对 VBA 的源代码控制解决方案来处理每个用例的原因:要使其功能齐全,它必须能够在打开文档时修改文档结构的压缩 XML,通过从磁盘加载 XML。

我有这个OSS项目,Rubberduck ,其中集成了 Git 源代码控制:

Rubberduck's Source Control panel

它与主机无关,因此它的作用与主机无关 - 但即使有些 claim "it's simple" ,事实是,好吧,事实并非如此:一个人会很高兴能够恢复代码 stash ;另一个需要单元格值和公式;另一个人需要能够恢复形状及其格式和分配的宏,另一个人会提示,因为他们在从源代码控制恢复项目时丢失了条件格式:归根结底,唯一的方法就是拥有一个文档类型VBComponent在源代码控制下,是提取其 XML 并将其保存在源代码控制下......但是,您无法完全恢复文档。

唯一合理的解决方案是尽可能将 VBA 代码实现与文档分离——编写可以工作的 VBA 代码,而不管代码所在的工作簿中的工作表是什么;参数化所有内容,并拥有一个生成工作表布局和格式等的模块 - 换句话说,不要“设计”工作表(在 Excel 中),“编码”它们(在 VBE 中)。

至于数据......好吧,运气不好:源代码控制是为了代码,而不是为了数据。

关于excel - 如何使用 VBA 导出工作表按钮和详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com