如何使用VBA导出图表button和细节

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

但是,我无法find一种方法来使用这张表。 如果我添加一个可视化的变化(例如,我添加一个button或更改工作表的样子),是否有办法导出工作表作为代码,就像模块,以便我可以导入工作表完全一样它从我的变化看?

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

任何build议或解决这个问题?

编辑:要清楚,我知道我可以出口我的床单作为模块以及。 但是,似乎没有任何东西可以指示出口纸张的外观。 因此,当我导入“表单”时,它将作为类模块导入。

“sheet”是一个Document type VBComponent ,它一个类模块,在宿主应用程序的对象模型(这里是一个Worksheet类)中指定一个特定的对象types。 所以“代码”部分作为类模块导出; “文档”部分就是您的主机文档 – 内容不仅仅是单元格的值和公式(字体,单元格格式,条件格式,单元格注释,形状等等),而且在Office 2007+中,这些都是序列化的以XML格式包装在一个.zip文件中(然后用.xlsx扩展名重新命名):为了正确控制文档的源代码,您需要在实际的XML上使用diff。

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

这就是为什么没有针对VBA的源代码pipe理解决scheme来处理每一个用例:因为它是全function的,它必须能够在打开文档时修改文档结构的压缩XML,从磁盘加载XML。

我有这个OSS项目, Rubberduck ,它具有集成的Git源代码控制function:

Rubberduck的源代码控制面板

这是主机不可知的,所以没有什么特定于主机的东西 – 但是即使有些人声称“这很简单” ,现实是,它并不是:一个人会很高兴能够恢复代码-背后; 另一个将需要单元格的值和公式; 另一个将需要能够恢复形状和格式,并分配macros,另一个人会抱怨,因为他们从源代码pipe理恢复他们的项目时,失去了条件格式:在一天结束时唯一的方式有一个文件types在源代码控制下的VBComponent ,是提取它的XML,并保持在源代码控制之下…但是,你不能完全恢复文档。

唯一合理的解决scheme是尽可能地从文档中分离VBA代码实现 – 编写VBA代码,无论代码托pipe在工作簿中的工作表是什么, 参数化所有东西,并且有一个模块来生成工作表布局和格式,换句话说,不要“devise”工作表(在Excel中),“编写”它们(在VBE中)。

至于数据…好吧,运气不好:源代码pipe理是为了代码 ,而不是数据

我昨天回答了一个类似的问题, 版本控制系统为Excel-VBA代码

来源控制表是艰难的。 想象一下,你在单元格A1,A2,A3中串行化数据,所以你可能有

 A1:"Foo" A2:"Bar" A3:"Baz" ... A5577: "Kevin" 

即大量的行。 那么你在行的顶部插入一行,所以例如3,那么下面的所有行将不同步,并会抛出5000! 版本比较中的不匹配; 这是非常恼人的(当我在一个系统上做了这个)。

也许你可能想好好想想这个问题,并发布一个可能的解决scheme。 我自己想一想,是不是有一些类似于链表的逻辑会有帮助。 所以,一个序列化一个单元格,然后序列化到下一个单元格的链接,并且遍历整个单元格列表。 然后单行插入只需要一个更改,一个链接插入。