使用相对路径将 Excel 加载项宏分配给功能区

使用相对路径将 Excel 加载项宏分配给功能区

我正在尝试为使用 Excel 电子表格作为输入的 Python 软件创建一个基本的 Excel GUI。

我已经设法创建了一个带有宏的基本插件,它可以为我运行 Python 代码。

为了使触发宏更加方便用户,我认为为我的包创建一个功能区会很好且可扩展。到目前为止,它只有“运行”选项,但将来我会添加其他预处理和后处理选项。

我很快意识到功能区和插件并不绑定到特定的工作簿,而是 Excel 级别的设置。

为了减轻用户遵循诸多步骤的麻烦,我设法将所有步骤捆绑在一个简单的 Excel UI 文件中,可以导入该文件来创建功能区。

这里的诀窍是,功能区使用如下路径引用加载项(以及宏):

复制代码

因此,我所有同事要做的(理论上)就是将他们的 Excel 工作簿复制到他们保存插件 xlam 文件的文件夹中,安装一次功能区,就可以了!

然而在实践中,我注意到一些非常奇怪的行为:

  • 安装功能区后,如果我立即打开工作簿并单击“运行”,代码就可以正常运行。
  • 如果我现在关闭并打开另一个工作簿,并尝试执行相同操作,我会收到一条弹出消息,提示无法在“user/mydocument/myaddin.xlma”中找到宏文件。当然,这是正常的,因为加载项未保存在此处。我感到困惑的是,为什么 Excel 似乎将“mydocument”搜索为当前工作目录,而不是工作簿所在的目录。更奇怪的是,如果我使用“另存为”重新保存工作簿,它就会再次正常运行。似乎在某些情况下,Excel 会重新定义其工作目录,因此当它搜索相对路径时会出错。

我遇到的问题是,我在网上看到的所有帮助都使用 VBA 代码来更改工作目录...但就我而言,Excel 甚至无法访问该代码所在的 add-in.xlma 文件。

如果您知道解决此问题的方法,我将不胜感激!

附言:由于我正在出差,所以现在用的是另一台电脑。但如果有需要的话,下周我会分享更多详细信息和截图

相关内容