打包和分发Excel应用程序的最佳方法是什么

时间:2020-03-05 18:43:41  来源:igfitidea点击:

我已经写了一个基于Excel的数据库报告工具。当前,所有VBA代码都与单个XLS文件相关联。用户通过单击工具栏上的按钮来生成报告。不幸的是,除非用户将文件保存为另一个文件名,否则所有报告的数据都将被清除。

在Word中创建了类似的工具后,可以将所有代码放入模板(.dot)文件中,然后从那里进行调用。如果将模板文件放在Office启动文件夹中,它将在每次启动Word时启动。有没有类似的方法可以在Excel中打包和分发我的代码?我尝试使用外接程序,但是找不到从应用程序窗口调用代码的方法。

解决方案

回答

我们可以修改存储在excel启动目录中的用户的personal.xls文件(在Office版本之间有所不同)。如果我们有很多用户,那就很奇怪了。

解决问题的另一种方法是将宏存储在模板(.xlt)文件中。然后,当用户打开文件时,他们无法将其保存回原始文件,而必须指定新的文件名将其另存为。这种方法的缺点是,我们随处都可以在每个保存的文件中获得原始代码的多个副本。如果我们修改了原始.xlt文件,并且有人在先前保存的.xls文件中重新运行了旧宏,那么事情可能会步履维艰。

回答

只需将代码移至Excel加载项(XLA),即可在启动时加载(假设它位于%AppData%\ Microsoft \ Excel \ XLSTART文件夹中),但如果它是加载项,而不是工作簿,则仅是宏和定义的启动函数将被加载。

如果功能取决于电子表格本身,那么我们可能要使用模板和插件的组合。

我正在分发这样的应用程序的一部分,我们有适用于Word,Excel和Powerpoint(XLA,PPA,DOT)的加载项以及Office 2007"功能区"版本(DOTM,XLAM和PPAM)

如果未找到插件启动代码,则会创建工具栏按钮,这意味着在任何工作簿/文档/等文件中,它们都可以单击工具栏按钮来运行我们的代码(我们有两个操作按钮和一个显示设置对话框的按钮)

模板并不是VBA代码的真正去路,Addins绝对是去的路。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

因此,要在启动时加载工具栏,我们使用类似..(检查工具栏是否存在,尽管代码将针对打开的每个工作表运行,但工具栏对于用户会话是持久的)

Public Sub Workbook_Open()
     ' startup code / add toolbar / load saved settings, etc.
End Sub

希望能有所帮助:)

回答

我总是使用Add-in(xla)/ Template(xlt)组合。外接程序将创建菜单(或者其他UI入口点)并根据需要加载模板。它还会将我们要持久保存的数据写入数据库(Access,SQLServer,文本文件,甚至是xls文件)。

第一条规则是使代码与数据分开。然后,如果我们以后进行了错误修复或者其他代码更改,则可以发送一个新的加载项,并且其所有模板和数据库均不受影响。

回答

我们是否研究了ClickOnce部署Excel文件?