是否有一个战术(阅读"黑客")解决方案,以避免将VBA代码和Excel工作表作为一个二进制文件?

ng5*_*000 6 excel vba excel-vba

据我所知,当我使用VBA代码创建Excel工作表时,VBA代码将与工作表一起保存为二进制文件.因此,我不能以有用的方式将代码放入源代码控制中,让多个开发人员处理问题,难以区分,等等.

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

谢谢.

Jon*_*nas 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
Run Code Online (Sandbox Code Playgroud)

现在,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
Run Code Online (Sandbox Code Playgroud)

运行上面的脚本应该启动生成Excel文件,该文件输出结果表.您可能需要更改一些内容以使其在文件系统中可移动.希望这可以帮助!