我写了一个基于Excel的数据库报告工具。 Currentely,所有VBA代码都与一个XLS文件相关联。用户通过单击工具栏上的按钮生成报告。不幸的是,除非用户将文件保存在另一个文件名下,否则所有报告的数据都将被删除。
当我在Word中创建类似的工具时,我可以将所有代码放在模板(.dot)文件中并从那里调用它。如果我将模板文件放在Office启动文件夹中,它将在每次启动Word时启动。是否有类似的方法,在Excel中打包和分发我的代码?我尝试过使用加载项,但是我找不到从应用程序窗口调用代码的方法。
答案 0 :(得分:10)
只需将您的代码移动到Excel Addin(XLA) - 这会在启动时加载(假设它位于%AppData%\ Microsoft \ Excel \ XLSTART文件夹中),但如果它是一个插件,而不是一个工作簿,那么只有您的宏和已定义的启动函数将被加载。
如果函数依赖于电子表格本身,那么您可能希望使用模板和插件的组合。
我正在分发这样的应用程序的一部分,我们有Word,Excel和Powerpoint(XLA,PPA,DOT)以及Office 2007'功能区'版本(DOTM,XLAM和PPAM)的插件
addin启动代码创建工具栏按钮,如果找不到它们,这意味着在任何工作簿/文档/等中,他们只需按工具栏按钮即可运行我们的代码(我们有两个操作按钮和一个显示设置的按钮对话框)
模板不是真正的VBA代码方式,Addins绝对是最佳选择......
因此,要在启动时加载工具栏,我们正在使用类似的东西...(检查工具栏是否存在 - 代码将针对打开的每个工作表运行,但工具栏对于用户会话是持久的)
Public Sub Workbook_Open()
' startup code / add toolbar / load saved settings, etc.
End Sub
希望有所帮助:)
答案 1 :(得分:2)
您可以修改存储在Excel启动目录中的用户的personal.xls文件(因Office版本而异)。如果你有很多用户,那可能很繁琐。
解决问题的另一种方法是将宏存储在模板(.xlt)文件中。然后,当用户打开它时,它们无法将其保存回原始文件,但必须指定新文件名以将其另存为。这种方法的缺点是,您可以使用每个保存的文件在整个地方获得原始代码的多个副本。如果您修改原始的.xlt并且有人重新运行以前保存的.xls文件中的旧宏,那么事情就会失败。
答案 2 :(得分:2)
我总是使用加载项(xla)/模板(xlt)组合。您的加载项会创建菜单(或其他UI入口点)并根据需要加载模板。它还会将要保留的数据写入数据库(Access,SQLServer,文本文件甚至xls文件)。
第一条规则是将代码与数据分开。然后,如果您以后修复了错误或更改了其他代码,则可以发送新的加载项,并且所有模板和数据库都不会受到影响。
答案 3 :(得分:0)
您是否研究过ClickOnce部署Excel文件?
答案 4 :(得分:0)
如何将Excel保存到具有只读权限的网络文件夹?可以使用集成的Windows身份验证完成身份验证,并且您不需要将连接密码存储到VBA中的数据库。然后,您只需向用户分发一次指向此位置的链接。如果要进行更新,则只更改该文件夹中的数据,恕不另行通知。