4

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

当我在 Word 中创建了类似的工具时,我可以将所有代码放在一个模板 (.dot) 文件中并从那里调用它。如果我将模板文件放在 Office 启动文件夹中,它会在我每次启动 Word 时启动。有没有类似的方法在 Excel 中打包和分发我的代码?我尝试过使用加载项,但没有找到从应用程序窗口调用代码的方法。

4

5 回答 5

10

只需将您的代码移动到 Excel 插件 (XLA) - 它会在启动时加载(假设它位于 %AppData%\Microsoft\Excel\XLSTART 文件夹中)但如果它是插件,而不是工作簿,那么只有您的宏和定义的启动函数将被加载。

如果函数依赖于电子表格本身,那么您可能希望使用模板和插件的组合。

我正在分发这样的应用程序的一部分,我们有 Word、Excel 和 Powerpoint(XLA、PPA、DOT)以及 Office 2007“功能区”版本(DOTM、XLAM 和 PPAM)的插件

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

模板并不是 VBA 代码的真正方法,插件绝对是要走的路......

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

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

希望有帮助:)

于 2008-08-27T09:22:20.197 回答
3

我总是使用插件(xla)/模板(xlt)组合。您的加载项创建菜单(或其他 UI 入口点)并根据需要加载模板。它还将您想要持久保存到数据库(Access、SQLServer、文本文件,甚至 xls 文件)的数据写入。

第一条规则是将代码与数据分开。然后,如果您以后有错误修复或其他代码更改,您可以发送一个新的加载项,并且它们的所有模板和数据库都不会受到影响。

于 2008-09-18T21:39:03.407 回答
2

您可以修改用户的personal.xls 文件,存储在excel 启动目录中(Office 版本不同)。但是,如果您有很多用户,那可能会很繁琐。

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

于 2008-08-27T08:13:04.667 回答
0

您是否研究过 ClickOnce 部署 Excel 文件?

于 2008-09-18T21:40:38.943 回答
0

如何以只读权限将 excel 保存到网络文件夹?身份验证可以通过集成的 windows 身份验证来完成,您不需要将连接密码存储到 VBA 中的数据库。然后,您只需将指向该位置的链接分发给您的用户一次。如果您要进行更新,您只会更改该文件夹中的数据,而无需用户通知。

于 2015-10-01T16:40:58.737 回答