有没有一种战术(阅读'黑客')解决scheme,以避免VBA代码和Excel工作表作为一个二进制文件?

据我所知,当我用VBA代码创build一个Excel工作表时,VBA代码被保存为工作表的二进制文件。 因此,我不能以有用的方式将代码放到源代码pipe理中,有多个开发人员在解决问题,难以区分等等。

有没有办法切换到VSTO,COM插件等? 例如,从Web服务,共享驱动器等运行的工作表加载所有的VBA? 任何想法赞赏。

谢谢。

我为Excel编写了一个构build系统,从源文件中导入VBA代码(然后可以将其导入到源代码控制,diffd等等)。 它通过创build一个包含导入的代码的新Excel文件来工作,所以它可能不适用于您的情况。

构buildmacros看起来像这样,我把它保存在一个名为Build.xls的文件中:

Sub Build() Dim path As String path = "excelfiles" Dim vbaProject As VBIDE.VBProject Set vbaProject = ThisWorkbook.VBProject ChDir "C:\Excel" ' Below are the files that are imported vbaProject.VBComponents.Import (path & "\something.frm") vbaProject.VBComponents.Import (path & "\somethingelse.frm") Application.DisplayAlerts = False ActiveWorkbook.SaveAs "Output.xls" Application.DisplayAlerts = True Application.Quit End Sub 

现在,VBIDE的东西意味着你必须导入一个名为“Microsoft Visual Basic for Applications Extensibility 5.3”的引用,我想。

当然你仍然有不得不启动Excel来build立的问题。 这可以用一个小的VB脚本来解决:

 currentPath = CreateObject("Scripting.FileSystemObject") _ .GetAbsolutePathName(".") filePath = currentPath & "\" & "Build.xls" Dim objXL Set objXL = CreateObject("Excel.Application") With objXL .Workbooks.Open(filePath) .Application.Run "Build.Build" End With Set objXL = Nothing 

运行上面的脚本应该启动构buildExcel文件输出结果表。 你可能不得不改变一些东西,使其在文件系统中移动。 希望这可以帮助!

我强烈build议不要在运行时加载VBA。 VBIDE自动化是最好的,我想你会遇到相当多的维护和支持头痛。

我的解决scheme是导出代码作为文本文件源代码控制peridocally。 我也将从xls中删除所有代码(完成表单,模块和类模块的删除,并删除工作表和工作簿模块中的代码),并只将这个“存根”xls放入源代码pipe理。

从源代码控制的重build将包括采取“存根”xls,导入所有窗体,类模块和模块,并复制并粘贴到所有的代码到工作表和工作簿模块。

虽然这是一个痛苦的过程,它确实允许代码的正确的源代码控制与所有常见的差异,分支等function。不幸的是大部分是手动的。 我写了一个插件,它自动化了一些这个,但它很快被黑客一起解决scheme,即相当多的bug,需要手动干预。 如果我总是重新审视它,并把它弄好,那么我会让你知道;-)

有趣的问题…我们也有一个VBA源代码pipe理的问题,但从来没有真正解决它。

此Microsoft知识库文章是否符合您的条件? 该代码被放在.BAS文件中,该文件可以位于任意位置(并且与.xls分开)。

正如我所说,我从来没有尝试过这样做,但看起来好像这可能是一种方法。

我还build议不要在运行时加载并查找make- style实用程序。 毕竟,如果你的代码是在源代码控制之下,那么你只需要在提交之后更新你的工作簿。

不幸的是,没有这样的效用,或者至less不是我能find的效用。

我认为,与其他替代方法(即不断重buildExcel工作簿文件)相比,使用VBA进行轻量级原型制作工作,将转移到VSTO或COM Addins更简单。 您还可以获得额外的好处,即不需要轻易“破解”源代码(即,您不仅需要猜测VBA项目密码)

最短的path是使用SourceTools.xla插件从http://www.codeproject.com/KB/office/SourceTools.aspx

另一种方法是编写一个类似的工具使用COM绑定到您最喜爱的编程语言。 我的一位能干的同事用Python创build了一个可以将包括VBA代码,工作表内容和公式以及VBA引用在内的所有内容导出到文本文件中的工具,并且可以将这些工作工作簿汇编成一个工作簿。 那也是在XLSX格式之前。