【问题标题】:How do I save an Excel Add-In with VBA如何使用 VBA 保存 Excel 加载项
【发布时间】:2018-05-15 11:25:29
【问题描述】:

我有一个 Excel 加载项,它使用其工作簿中的工作表来保存一些首选项数据(例如,用户窗体上的 refEdit 控件的最后使用值)。

然后,当用户表单中的首选项发生更改时,我使用 vba thisworkbook.save 保存加载项工作簿。

我发现这有时会在 myDocuments 中创建一个 xlsm 文件,而不是将加载项保存在适当的位置(另请参阅 a copy of excel add-in is created in my documents after saving)。

如何在不创建副本的情况下将加载项保存在适当的位置(在加载项文件夹中)?注意 activeworkbook.save 不起作用,因为它保存打开的工作簿而不是加载项。

我也可以为首选项创建一个临时文件,但使用加载项工作簿中的工作表似乎是存储数据的好地方。

【问题讨论】:

  • ThisWorkbook.Save 应该可以工作,假设加载项没有以只读方式打开,但我个人认为这是不好的做法。我建议您使用SaveSettingGetSetting 将首选项存储在注册表中
  • 加载项保存在哪里(哪个路径)?我怀疑运行该加载项的用户没有对该路径的写入权限,而是将其保存到我的文档中。你能检查一下吗?
  • 如果只读...有一个修复ThisWorkbook.ChangeFileAccess(xlReadWrite) ....!但是,是的,我同意 Rory 的偏好。或者将文件存储在 %appdata% 中。
  • 谢谢大家。关于使用注册表,我的加载项只是 .xla 加载项而不是 .exe。此外,一些偏好数据存储在多单元格范围内。由于这些原因,我认为临时文件替代方案是一个更好的选择。
  • 关于包含文件夹的读/写状态:它应该是读/写的,因为用户将加载项自己复制到文件夹中。代码不会返回错误,而不仅仅是将文件保存在其他地方吗?

标签: vba excel office-addins excel-addins


【解决方案1】:

据我所知,您不能将文件保存为加载项并使用文件上的工作表。
加载项文件是仅限 VBA 的文件。

您说要在工作表上保存设置。使用注册表呢?

将数据保存到注册表非常容易(在我看来实际上比单元格更容易)。

保存设置:

SaveSetting "MyAddIn", "Settings", "Username", "BOB"

上面的行在窗口的注册表中创建了一个值为“BOB”的值 作为“用户名”。

要从您使用的注册表中获取设置:

Username = GetSetting("MyAddIn", "Settings", "Username")

您可以阅读有关方法here

与工作表相反,将其保存在注册表中的好处是您不能意外删除或操纵数据。

【讨论】:

  • 谢谢安德烈亚斯。您可以通过代码读取和写入加载项文件中工作表上的数据。我在 thisworkbook.sheets(1) 上使用单元格引用来存储值。在找出问题的原因后,我现在要改变我的计划。我会查看注册表选项。
【解决方案2】:

我找到了答案:用户打开了两份 Excel(2016 年和 2010 年)。这导致加载项文件被两个打开的 Excel 副本之一锁定,这意味着第二个副本以只读方式打开加载项并且无法保存更改。

一个罕见的错误,我没有预见到。我将重写以将首选项保存到 %appdata% 文件中。

我建议人们避免将thisworkbook.save 与插件一起使用。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多