Excel 如何使用VBA导出图纸按钮和详细信息

Excel 如何使用VBA导出图纸按钮和详细信息,excel,git,vba,module,worksheet,Excel,Git,Vba,Module,Worksheet,我一直在忙于在一个Excel应用程序中导入/导出VBA模块和类。与版本控制一起使用似乎非常有用。我喜欢。我可以轻松地在模块中实现代码更改、导出更改、提交和推送更改,以及在Excel应用程序的另一个实例中“重新加载”(删除所有模块并重新导入)更改 但是,我找不到一种方法将其用于床单。如果我向工作表添加一个可视更改(例如,我添加了一个按钮或更改了工作表的外观),是否有办法将工作表作为代码导出,就像模块一样,这样我就可以完全按照更改后的外观导入工作表 我已经知道了一些伪解决方案,但它们要么不适合我在版

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

但是,我找不到一种方法将其用于床单。如果我向工作表添加一个可视更改(例如,我添加了一个按钮或更改了工作表的外观),是否有办法将工作表作为代码导出,就像模块一样,这样我就可以完全按照更改后的外观导入工作表

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

对这个问题有什么建议或解决办法吗


编辑:为了清楚起见,我知道我也可以将我的工作表导出为模块。但是,似乎没有任何东西表明该工作表在导出时的外观。因此,当我导入“工作表”时,它将作为类模块导入。

我昨天回答了一个类似的问题

源代码控制非常困难。假设您将A1、A2、A3单元格中的数据序列化,以便

A1:"Foo"
A2:"Bar"
A3:"Baz"
...
A5577: "Kevin"
i、 很多行。然后在顶部的行中插入一行,例如3,那么下面的所有行都将不同步,并抛出5000!版本比较不匹配;这非常令人恼火(当我在一个系统上工作时)


也许你想好好考虑一下这个问题,然后发布一个可能的解决方案。我自己快速思考一下,我想知道一些类似于链表的逻辑是否会有所帮助。因此,一个序列化一个单元格,然后还序列化到下一个单元格的链接,然后遍历整个单元格列表。然后一行插入只需要一个更改,即链接插入。

我昨天回答了一个类似的问题

源代码控制非常困难。假设您将A1、A2、A3单元格中的数据序列化,以便

A1:"Foo"
A2:"Bar"
A3:"Baz"
...
A5577: "Kevin"
i、 很多行。然后在顶部的行中插入一行,例如3,那么下面的所有行都将不同步,并抛出5000!版本比较不匹配;这非常令人恼火(当我在一个系统上工作时)

也许你想好好考虑一下这个问题,然后发布一个可能的解决方案。我自己快速思考一下,我想知道一些类似于链表的逻辑是否会有所帮助。因此,一个序列化一个单元格,然后还序列化到下一个单元格的链接,然后遍历整个单元格列表。然后,单行插入只需要一个更改,即链接插入。

一个“工作表”是一个
文档
-type
VBComponent
,它是一个类模块,在宿主应用程序的对象模型(这里是
工作表
类)中对特定对象类型进行子类化。因此,“代码”部分作为类模块导出;“文档”部分是您的主文档-内容不仅仅是单元格值和公式(字体、单元格格式、条件格式、单元格注释、形状等),在Office 2007+中,这些内容以XML格式序列化,包装在.zip中(然后以.xlsx扩展名重命名):为了正确控制文档的源代码,您需要实际XML上的差异

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

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

我有一个OSS项目,它的特点是集成了Git源代码控制:

它是主机不可知论的,所以它所做的事情并没有主机特定性——但即使有,现实情况是,事实并非如此:一个人会很高兴能够恢复后面的代码;另一个需要单元格值和公式;另一个人需要能够恢复形状及其格式和指定的宏,另一个人会抱怨,因为他们在从源代码管理恢复项目时丢失了条件格式:在一天结束时,只有这样才能使文档类型
VBComponent
受源代码管理,就是提取其XML并将其置于源代码控制下。。。但是,您无法完全恢复文档

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

至于数据。。。好吧,真倒霉:源代码管理是为了代码,而不是为了数据。

一个“工作表”是一个
文档
-type
VBComponent
,它是一个