据我所知,当我使用VBA代码创建Excel工作表时,VBA代码将与工作表一起保存为二进制代码。因此,我不能以有用的方式将代码放入源代码控制中,让多个开发人员处理问题,难以区分等等。
有没有办法围绕这个而不切换到VSTO,COM插件等?例如。对于要在运行时从Web服务,共享驱动器等加载所有VBA的工作表?任何想法都赞赏。
感谢。
答案 0 :(得分:12)
我为Excel编写了一种构建系统,它从源文件中导入VBA代码(然后可以将其导入源代码控制,差异等)。它的工作原理是创建一个包含导入代码的新Excel文件,因此它可能不适用于您的情况。
构建宏看起来像这样,我把它保存在一个名为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才能构建。这可以通过一个小的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
运行上面的脚本应该启动构建Excel文件,该文件输出结果表。您可能需要更改一些内容以使其在文件系统中可移动。希望这有帮助!
答案 1 :(得分:3)
我强烈建议您不要尝试在运行时加载VBA。 VBIDE自动化充其量只是片状,我认为你会遇到很多维护和支持问题。
我的解决方案是将源代码控制的peridocally代码导出为文本文件。我还将删除xls中的所有代码(完全删除表单,模块和类模块以及删除Worksheet和Workbook模块中的代码),并将此“stub”xls放入源代码控制中。
从源代码控制重建将包括获取“存根”xls,导入所有表单,类模块和模块,并将所有代码复制并粘贴到工作表和工作簿模块中。
虽然这是一个痛苦的过程,但它确实允许对代码进行适当的源代码控制,具有差异化,分支等所有常用功能。不幸的是,大多数代码都是手动的。我确实写了一个加载项,它自动化了一些,但很快被黑客攻击解决方案,即相当错误,需要人工干预。如果我再次回顾它并将其提升到划痕那么我会让你知道; - )
答案 2 :(得分:1)
有趣的问题......我们在VBA源代码控制方面也存在问题,但从未实际解决过这个问题。
此Microsoft KB article符合您的条件吗?代码放在.BAS文件中,该文件可以位于任意位置(并与.xls分开)。
正如我所说,我从未尝试过这样做,但看起来这似乎是一种方法。
答案 3 :(得分:1)
最短路径是使用http://www.codeproject.com/KB/office/SourceTools.aspx
中的SourceTools.xla插件另一种方法是使用COM绑定编写一个类似的工具到您喜欢的编程语言。我的一位聪明的同事在Python中创建了一个可以将包括VBA代码,工作表内容和公式甚至VBA引用在内的所有内容导出到文本文件中,并且可以组装一个工作工作簿。这也是XLSX格式之前的。
答案 4 :(得分:0)
我还建议不要在运行时加载并寻找make样式的实用程序。毕竟,如果您的代码受源代码控制,那么您只需要在提交后更新工作簿。
不幸的是,没有这样的实用工具,或者至少没有我能找到的工具。
答案 5 :(得分:0)
我认为与替代方案相比(即不断重建Excel工作簿文件),使用VBA进行轻型原型制作工作,转移到VSTO或COM Addins会更加麻烦。您还可以获得不具备“hackable”源代码的额外好处(即您需要的不仅仅是猜测VBA项目密码)